日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

SQLAlchemy之SQL Expression

發布時間:2025/6/15 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQLAlchemy之SQL Expression 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQLAlchemy是一個強大的Python SQL工具箱, 提供了包括ORM在內的各種支持.

首先使用pip安裝;

pip install SQLAlchemy

SQL Expression Language 是SQLAlchemy Core的組成部分, 提供了與SQL類似的API而避免了直接書寫SQL語句.

連接數據庫

使用下列語句連接數據庫:

from sqlalchemy import create_engine engine = create_engine("mysql://root:passwd@localhost:3306/webpy?charset=utf8", echo=True)

create_engine的第一個參數的格式為:

數據庫類型://用戶名:密碼@數據庫主機地址/數據庫名?編碼

沒有密碼則為空,不填; echo=True則在終端進行回顯, 默認為False.

engine可以直接執行sql語句:

engine.execute("SELECT * FROM user")

如果需要事務性操作則需要使用connect:

conn = engine.connect() result = conn.execute("SELECT * FROM user")

Create Table

使用metadata和Table類來定義表:

from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey import MySQLdbengine = create_engine("mysql://root:password@localhost:3306/test?charset=utf8", encoding="utf-8", echo=True)metadata = MetaData()# define user = Table('user', metadata,Column('user_id', Integer, primary_key=True),Column('name', String(20)),)# do create and commit metadata.create_all(engine)

回顯信息:

... INFO sqlalchemy.engine.base.Engine CREATE TABLE user (user_id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(20), PRIMARY KEY (user_id) ) .... INFO sqlalchemy.engine.base.Engine COMMIT

Insert

使用engine.connect()來執行:

from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey import MySQLdbengine = create_engine("mysql://root:password@localhost:3306/test?charset=utf8", encoding="utf-8", echo=True)metadata = MetaData()user = Table('user', metadata,Column('user_id', Integer, primary_key=True),Column('name', String(20)),Column('fullname', String(40)),)conn = engine.connect() i = user.insert() u = {'name': 'yichya'} result = conn.execute(i, **u)

select

仍然使用conn對象, 先做一個select * from user

conn = engine.connect() s = user.select() result = conn.execute(s) print (result.fetchall() )

回顯:

INFO sqlalchemy.engine.base.Engine SELECT user.user_id, user.name, user.fullname FROM user INFO sqlalchemy.engine.base.Engine () [(1L, u'yichya', None)]

可以使用for-each遍歷結果集:

>>>for raw in result: ... print(raw) INFO sqlalchemy.engine.base.Engine () (1L, u'yichya', None) (2L, u'finley', None) (3L, u'yy', None) (4L, u'godess', None)

使用user的column對象可以自定義查詢的字段

>>>print(user.c) ['user.user_id', 'user.name', 'user.fullname']

注意select不是從user對象中獲得的:

from sqlalchemy.sql import select conn = engine.connect() s = select([user.c.user_id, user.c.name]) result = conn.execute(s) print (result.fetchall() )

可以在終端看到:

INFO sqlalchemy.engine.base.Engine SELECT user.user_id, user.name FROM user INFO sqlalchemy.engine.base.Engine () [(1L, u'yichya'), (2L, u'finley'), (3L, u'yy'), (4L, u'godess')]

使用where()篩選記錄:

from sqlalchemy.sql import select conn = engine.connect() s = select([user.c.name]).where(user.c.name == 'yy') result = conn.execute(s) print(result.fetchall() )

可以看到回顯:

INFO sqlalchemy.engine.base.Engine SELECT user.name FROM user WHERE user.name = %sINFO sqlalchemy.engine.base.Engine ('yy',) [(u'yy',)]

實際上user.c重載了各種運算符:

>>>print(user.c.name == None) "user".name IS NULL

where支持的運算符包括: > < <= >= == 和 != , 邏輯符and,or, not需要用下述方法:

>>>from sqlalchemy.sql import and_ >>>print(and_(user.c.user_id == address.c.user_id, address.c.city == 'New York') ) "user".user_id = address.user_id AND address.city = :city_1

順便展示了多表連接查詢, 也可以使用join進行查詢:

>>>s = select([user.c.name, address.c.email]).select_from(user.join(address, user.c.user_id==address.c.user_id)) >>>print s SELECT "user".name, address.email FROM "user" JOIN address ON "user".user_id = address.user_id

更多的查詢請參見,文末的參考鏈接.

Update

仍然使用connect執行:

conn = engine.connect() u = user.update().where(user.name == 'yichya').values(name='aa') result = conn.execute(u)

Delete

delete也很簡單:

>>>d = user.delete().where(user.c.name == 'yichya') >>>conn.execute(d) INFO sqlalchemy.engine.base.Engine DELETE FROM user WHERE user.name = %s INFO sqlalchemy.engine.base.Engine ('yichya',) INFO sqlalchemy.engine.base.Engine COMMIT

參考資料:

sqlalchemy docs latest

SQLAlchemy 簡單筆記

使用SQLAlchemy-廖雪峰

總結

以上是生活随笔為你收集整理的SQLAlchemy之SQL Expression的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。