Python3的mysql操作和session用法

2021-08-19 23:56:43 字數 4920 閱讀 5968

建立乙個test庫

create database test;

授權乙個使用者

grant all privileges on *.* to 'xiang'@'%' identified by '1qaz@wsx';

建立表create table student(id int not null);

查詢select * from tabel_name where 條件1 and 條件2

增加insert into table_name (id, name, age, ***, grander) values (1, 'ling', 25, 'm', 99), (2, 'ajing', 45, 'f', 88);

改update table_name set id=10 where 條件判斷

刪除delete from table_name where 條件判斷

drop table table_name

聯合查詢

select a.id, b.name from a a join b b on a.id=b.tid

建立索引

create index idx_庫名_表名_列名1_列名2 (列名1, 列名2)

檢視sql是否走索引

explain select * from student where name='ling'

鏈結資料庫

python2 使用的是mysqldb

python3 使用的pymysql pip安裝

1. 建立鏈結和游標

注意:在mysql連線中,盡量使用乙個連線,確保mysql的併發數

conn = pymysql.connect(host='', port=, user='', passwd='', db='')

cus = conn.curse()

2. 實行sql

sql = "select * from student;"

cus.execute(sql)

cus.fetchone() 獲取單個 返回值 tuple

cus.fetchall() 獲取多個 返回值 list(單個元素是tuple)

cus.fetchmany(size=n) 獲取多個

3. 關閉游標和連線

cus.close()

conn.close()

注意結合try exception finally的使用

sqlalchemy

1. 建立引擎

engine = create_engine('mysql+pymysql://username:password@hostname:port/db')

2. 建立session

dbsession = sessionmaker(bind=engine)

session = dbsession()

3.建立表

a. 獲得engine

b. metadata = metadata(engine)

c. student = table('表名', metadata, colume('id', integer, primary_key=true), colume('name', string(50))

d. metadata.create_all()

4.增加

a. 先要有乙個模型

base = declarative_base(0

class student(base):

__tablename__ = 'student'

id = column(integer, primary_key=true)

name = column(string(100), primary_key=true)

b. 匯入模型類,例項化該類,

sutdent1 = student(1, 'ling')

c. session.add(單例項) session.add_all([例項1, 例項2])

5. 查詢

filter和filter_by的區別

filter:可以使用》 < 等,但是列必須是: 表.列, filter的等於號是==

session.query(student).filter(student.id>100)

filter 不支援組合查詢

session.query(student).filter(studnet.id>100).filter(name=='ling')

filter_by: 可以直接寫列,不支援< > filter_by 等於是==

session.query(student).filter_by(id==10)

filter_by 可以支援組合查詢

session.query(student).filter_by(name=='ling' and id=='342')

select * from student where name like '%ling%';

模糊查詢含有ling的關鍵字

模糊查詢

session.query(student).filter(student.name like('%ling%'))

獲取資料的時候有兩個方法:

one() tuple

all() list(單個元素是tuple)

如果在查詢中不寫one(), 或者all() 出來的就是sql語句

6. 更新

1. 先查出來

2. 跟新一下類所對應的屬性值就ok

3. session.commit()

student1 = session.query(student).filter(student.id==1001)

student1.name = "test"

session.commit()

7. 刪除

1. 先查出來

2. 直接呼叫delete()方法就可以

3. 提交一下

8.統計, 分組,排序

統計:count()

只需要在查出來以後, 把one或者all替換成count()

統計有多少個

分組:group_by

查出來以後,把one或者all替換成group_by(屬性)

二、session用法

from sqlalchemy import create_engine, integer, string, column

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import sessionmaker

base = declarative_base()

class student(base):

__tablename__ = 'student'

id = column(integer, primary_key=true)

name = column(string(100))

age = column(integer)

address = column(string(100))

def update(session):

student1 = session.query(student).filter(student.id == 1001).one()

student1.name='test123'

session.commit()

student2 = session.query(student).filter(student.id == 1001).one()

print(student2.name)

def delete(session):

session.query(student).filter(student.id == 1001).delete()

session.commit()

def insert(session):

student1 = student(id=1004, name='ling', age=28, address='shanxi')

session.add(student1)

session.commit()

def count(session):

numnber = session.query(student).filter().count()

print("total student is ".format(numnber))

def groupby(session):

groupbyage = session.query(student).group_by(student.age).all()

print(groupbyage)

for i in groupbyage:

print(i.id, i.name, i.age, i.address)

def orderby(session):

orderbyage = session.query(student).order_by(student.age.desc()).all()

for x in orderbyage:

print(x.id, x.name, x.age, x.address)

def main():

engine = create_engine('mysql+pymysql:')

dbsession = sessionmaker(bind=engine)

session = dbsession()

# insert(session)

# update(session)

# delete(session)

# count(session)

# groupby(session)

orderby(session)

if __name__ == '__main__':

main()

python3 操作MySQL資料庫

pip3 install pymysql usr bin python3 import pymysql 在進行資料的修改更新和刪除時,需要進行commit 資料的獲取 cursor.fetchone self cursor.fetchall self cursor.fetchmany self,si...

python3的檔案操作

python的檔案操作和php的檔案很類似 file物件使用 open 函式來建立,open的引數 r表示讀,w寫資料,在寫之前先清空檔案內容,a開啟並附加內容,開啟檔案之後記得關閉 下表列出了 file 物件常用的函式 序號方法及描述 file.close 關閉檔案。關閉後檔案不能再進行讀寫操作。...

使用python3操作mysql資料庫

因為使用的python3.6,所以需要載入pymysql庫,需要注意的是,python2和python3載入的庫是不一樣的。pymysql.connect host,port,user,passwd,db,charset 如 host localhost port 3306,user root pa...