前期我發表過一篇文章:python sqlalchemy的簡單用法,後來又看了很多sqlchemy的新版本文檔,發現自己那篇文章裏講的方法很多代碼都是畫蛇添足,還有更簡單的用法。
我們應用的場景依然是你的數據庫表是已經建立好的,只是想用python操作數據庫(增、刪、查、改等),但不涉及建表、主外鍵關係等內容(因爲這些內容一般都是直接用SQL)。
類的映射
比如我用來存儲用戶信息的sqlite數據庫 (test.db) 結構是這樣的:
create table if not exists users (
id integer primary key,
name varchar(20),
password varchar(20)
);
import sqlalchemy
from sqlalchemy.orm import Session
from sqlalchemy.ext.automap import automap_base
if __name__ == "__main__":
engine_str = 'sqlite:///:test.db'
engine = sqlalchemy.create_engine(engine_str)
session = Session(engine)
# 下面這兩句話就完成了ORM映射 Base.classes.XXXX即爲映射的類
# Base.metadata.tables['XXX']即爲相應的表
Base = automap_base()
Base.prepare(engine, reflect = True)
# 查詢操作
result = session.query(Base.classes.users).all()
# 插入操作
item = Base.classes.users(name='lxq', password='1234')
session.add(item)
session.commit()
session.close()
簡單定義了兩個類之後,不用關心數據表的內部實現,sqlalchemy會實現自動的映射,隨後手冊上的很多操作都可以正常使用了。
數據修改
ed_user = session.query(User).filter_by(name='ed').first()
ed_user.name = 'love'
session.commit()
批量插入
engine.execute(User.__table__.insert(),
[{'name':'hello', 'password':'1234'},
{'name':'hello2', 'password':'1234'}])
MISC-lazy connecting