您好,登錄后才能下訂單哦!
這篇文章主要介紹python連接數據庫操作sqlalchemy的方式,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
sqlalchemy是什么呢?其實它就是一個程序,是經常使用的關系程序,應用十分廣泛,所以學習好sqlalchemy是非常重要的,結合知識點以及下面示例,很輕松的學會這部分內容。
1、ORM框架
常見的ORM框架
1)SQLAlchemy:SQLAlchemy
2)SQLObject
3)Storm
4)Django's ORM
2、SQLAlchemy介紹
sqlalchemy是Python ORM的開源框架,使用它可以快速方便的構建數據庫模型。
SQLALchemy本身無法操作數據庫,需要依賴pymysql第三方模塊,Dialect用于和數據API進行交流,根據配置文件的不同調用不同的數據庫API,從而實現對數據庫的操作
使用pymysql連接數據庫格式:
mysql + pymysql: / / <username>:<password>@<host> / <dbname>[?<options>]
3、安裝SQLAlchemy與檢查是否安裝成功
#安裝 pip install SQLAlchemy #檢查是否安裝成功 C:\Users\lsl\Desktop>python Python 3.7.0rc1 (v3.7.0rc1:dfad352267, Jun 12 2018, 07:05:25) [MSC v.1914 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sqlalchemy >>> sqlalchemy.__version__ '1.3.18'復制代碼
4、使用SQLAlchemy操作數據庫的表——創建對象
from sqlalchemy import create_engine # 連接本地test數據庫 engine = create_engine('mysql+pymysql://root:root@localhost:3306/testdab',#數據庫類型是mysql,采用pymysql數據庫驅動來連接,用戶名是root,密碼也是root,連接本地數據庫testdab(連接的數據庫要是已存在的,就是你本地已有的數據庫) encoding='utf-8', # 編碼格式 echo=True, # 是否開啟sql執行語句的日志輸出 pool_recycle=-1, # 多久之后對線程池中的線程進行一次連接的回收(重置) (默認為-1),其實session并不會被close poolclass=NullPool # 無限制連接數 )復制代碼
5、簡單查詢——使用SQL語句
result = engine.execute("select * from students")//在execute()里的參數是查詢的sql語句 print(result.fetchall()) //打印出查詢的結果復制代碼
6、創建映射
創建一個py文件來做數據表的映射text2.py
#引入要使用的declarative_base from sqlalchemy.ext.declarative import declarative_base #在要映射的數據表students中有id,name兩個字段,所以要引入Integer對應id,String對應name from sqlalchemy import Column, Integer, String #聲名Base Base = declarative_base() #User類就是對應于 __tablename__ 指向的表,也就是數據表students的映射 class User(Base): #students表是我本地數據庫testdab中已存在的 __tablename__ = 'students' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(64),nullable=False) __table_args__ = { "mysql_charset": "utf8" }復制代碼
7、查詢
查詢students表中所有的數據
result = mySession.query(News).all() print(result[0])復制代碼
查詢students表中第一條數據
result = mySession.query(User).first() print(result.name) #打印對象屬性復制代碼
通過id查詢數據(id=2)
result = mySession.query(User).filter_by(id=2).first() print(result.name)復制代碼
自定義過濾條件
result = mySession.query(User).filter(text("id>:id")).params(id=2).all()復制代碼
根據主鍵查詢
result = mySession.query(User).get(2)復制代碼
8、增加數據
user = User(name="小紅") mySession.add(user) mySession.commit() 復制代碼
9、刪除數據
mySession.query(User).filter(User.id == 1).delete() mySession.commit()復制代碼
10、修改數據
mySession.query(User).filter(User.name=="小紅").update({"name":"小白"}) mySession.commit()復制代碼
11、常用條件查詢代碼
表名:User 1.條件查詢 session.query(User).filter(User.name=='張三'){ .all() 查詢所有 .one() 查詢單個(如果存在多個會異常) .first() 查詢符合條件的第一個 .limit(1).one() limit限制查詢,limit(1).one()升級第一個 .count() 查詢符合條件的總個數 } 2.主鍵查詢 session.query(User).get(0) 查詢主鍵ID=0 3.offset(n) 限制前面n個,顯示后面n+1個 #查詢出第三個后面的所有 session.query(User).offset(3).all() 4.slice()切片 #slice(1,3) 與python的slice一致,從0開始 左閉右開,顯示1,2兩個元素 session.query(User).slice(1,,3).all() 5.order_by() 默認升序 session.query(User).order_by(User.id).all() 6.desc() 降序 session.query(User).order_by(desc(User.id)).all() 7.like 模糊匹配,與sql一樣 session.query(User).filter(User.neme.like('%吳')).add() 8.notlike 與7相反 form operator import * 9.in_() 包含 #查詢是否包含唐人、吳新喜這個用戶的信息 session.query(User).filter(User.name.in_(['唐人','吳新喜'])).all() 10.notin_() 不包含 11.is_ 兩種表達方式 None #查詢所有手機號為null的信息 session.query(User).filter(User.phone==None).all() session.query(User).filter(User.phone.is_(None)).all() 12. isnot() 13. or_ 條件或者關系 #查詢name==吳新喜或者唐人的用戶信息 session.query(User).filter(or_(User.name=='唐人',User.name=='吳新喜')) 聚合函數 1.count group_by #查詢所有的密碼并且計算其相同的個數 from sqlalchemy import func ssession.query(db_user.psw,func.count(db_user.psw)).group_by(db_user.psw).all() 2.having having字句可以讓我們篩選成組后的各種數據,where字句在聚合前先篩選記錄,也就是說作用在group by和having字句前。 而having子句在聚合后對組記錄進行篩選。真實表中沒有此數據,這些數據是通過一些函數生存。 即先成組在篩選 #查詢所有的密碼并且計算其相同的個數,having條件相同密碼總數大于1的數據 ssession.query(db_user.psw,func.count(db_user.psw)).group_by(db_user.psw).having(func.count(db_user.psw)>1).all() 3.sum #計算所有id的總和 ssession.query(func.sum(db_user.id)).all() 4.max #最大的ID ssession.query(func.max(db_user.id)).all() 5.min #最小的id ssession.query(func.min(db_user.id)).all() 6.lable 別名 lable別名不能用在having中 7.extract 提取時間元素 from sqlalchemy import extract復制代碼
流程總代碼:
#import from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String from sqlalchemy.orm import sessionmaker from sqlalchemy.pool import NullPool #創建連接對象也就是為了連接到本地的數據庫 engine = create_engine('mysql+pymysql://root:root@localhost:3306/testdab', encoding='utf-8', # 編碼格式 echo=True, # 是否開啟sql執行語句的日志輸出 pool_recycle=-1, # 多久之后對線程池中的線程進行一次連接的回收(重置) (默認為-1),其實session并不會被close poolclass=NullPool # 無限制連接數 ) #聲名Base Base = declarative_base() # 創建會話 session = sessionmaker(engine) mySession = session() # 創建類,繼承基類,用基本類型描述數據庫結構 class User(Base): __tablename__ = 'students' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(64),nullable=False) __table_args__ = { "mysql_charset": "utf8" } #sql語句查詢 result = engine.execute("select * from students") print(result.fetchall()) # 查詢第一條 result = mySession.query(User).first() print(result.name) #打印對象屬性 # 查詢所有 result = mySession.query(User).all() print(result[0]) # 查詢id為2的 result = mySession.query(User).filter_by(id=2).first() print(result.name) # 分頁查詢 0,2 result = mySession.query(User).filter(User.id>1).limit(2).offset(0).all() print(result) #插入新數據 user = User(name="小紅") mySession.add(user) mySession.commit() result = mySession.query(User).filter_by(name="小紅").first() print(result.name) #修改已有數據 mySession.query(User).filter(User.name=="小紅").update({"name":"小白"}) mySession.commit() result = mySession.query(User).filter_by(name="小白").first() print(result.name) #刪除數據 mySession.query(User).filter(User.id == 1).delete() mySession.commit() result = mySession.query(User).first() print(result.name) #打印對象屬性復制代碼
以上是python連接數據庫操作sqlalchemy的方式的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。