關于sqlalchemy的使用
- 說明
- 一、sqlachemy總體使用思路
- 二、安裝與創建庫、連結庫
- 三、創建表、增加數據
- 四、查詢記錄
- 五、更新或刪除
- 六、關聯表定義
說明
- 本教程所需軟件及庫python3.10、sqlalchemy
- 安裝與創建庫、連結庫
- 創建表、增加數據
- 查詢記錄
一、sqlachemy總體使用思路
- 在創建或連結后會返回engine(可以參考第二節安裝與創建庫、連結庫)
- 在創建表后會返回一個表名(可以參考第三節創建表、增加數據)
- 使用時表名.方法.屬性
- 方法有insert,select,update,delecte
- 與數據對接時,conn = engine.connect()—conn.execut(表方法返回的值)
- 當數據庫的數據發生改變時,要提交(conn.commit())
- 查詢時,要注意條件,有兩種方法where() | or_ | and_
二、安裝與創建庫、連結庫
- 安裝庫
pip install sqlalchemy
#查看版本
sqlalchemy.__vetrsion__
- 創建庫或連結庫
#連結或創建sqlite3
from sqlalchemy import create_engine
engine = create_engine(`sqlite:///db_path.db`,echo=True)
conn = engine.connect()
#連結或創建mysql
from sqlalchemy import create_engine
engine = create_engine(`mysql://user:pwd@localhoast/庫名`,echo=True)
conn = engine.connect()
注:create_engine如果已經存在就連結,如果不存在就創建。
- 在sqlachemy執行sql語句
import sqlachemy
query = sqlachemy.text("select * from 表名")#sql語句
engine = sqlachemy.create_engine(`sqlite:///db_path.db`,echo=True)
conn = engine.connect()
result_set = conn.execute(query)
print(result_set.all())
conn.close()
engine.dispose()
注:以下代碼engine代表創建或檢查數據庫,conn代表連結數據庫。
三、創建表、增加數據
- 創建表
創建表要用到sqlalchemy的三個庫MetaData、Table、Column及類型代碼
from sqlachemy import MetaData,Table,Column
meta = MetaData()
#Meta定義好的字段屬性存在這,所以第二個字段就要傳它
var = Table(
'表名',meta,
Clolumn('字段名',sqlachemy.類型,primary_key=True),
.......
)
meta.create_all(engine)#創建表
如果表已經存在了,就不會創建,如果不存在就創建。
2. sqlachemy字段類型
名稱 | 字段英文 | 用法 | 說明 |
---|---|---|---|
整形 | Integer | Integer | 存整數 |
小數 | 存小數 | ||
字符 | String | String(字符個數) | 存字符 |
日期 | Date | Date | 存年月日 |
– | – | – | – |
注:主鍵primary_key=True,unique=True唯一,unllable=True不能為空。
- 增加數據(insert)
3.1 插入一條數據
var = 表名.insert().values(字段名=值,......)
with engine.connect() as conn:conn.execute(var)conn.commit()
1、連結conn以后執行數據庫操作要用conn.execut(sqlachemy語句)
2、數據庫數據有變要提交事務,conn.commit()
3、var = 表名.insert().values(字段名=值,…)是新增數據的sqlachemy語句
4、 自增長是插一次,它就增加一次,它不管你是否成功
3.2 插入多條數據
var = 表名.insert()
with engine.connect() as conn:conn.execute(var,[{'字段名':value,.......},{'字段名':value,.......},........])conn.commit()
這個要用列表,并且列表里放字典,key是字段名,value是對應的值
四、查詢記錄
- sql查詢語句
select * from 表名
- 函數表達式
表名.select()
- 結果獲取
結果.fetchall()#獲取所有數據
結果.fetchone()#獲取第一條數據
- 條件查詢
表名.select().where(表名.c.字段名條件)
#一次只能有一個條件
#如果多個條件查詢時,在后面加.where(表名.c.字段名條件)
- and_(與)、or_(或)
from sqlachemy.sql import and_,or_
表名.select().where(or_(條件,條件.....) | and_(條件,條件.....))
# 要在where中使用and_,or_
# and_,or_可以相互嵌套
五、更新或刪除
- 更新
表名.update().where(條件).values(字段名=value)
#查詢結果后再更新值,一個values可以更新多條記錄或所有記錄,取決于查詢的結果
- 刪除
表名.delete().where(條件)
#查詢結果后再刪除,可以刪除多條記錄或所有記錄,取決于查詢的結果