您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python的ORM框架sqlalchemy如何使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python的ORM框架sqlalchemy如何使用”文章能幫助大家解決問題。
1、安裝
#進入虛擬環(huán)境 #執(zhí)行 ./python3 -m pip install import sqlalchemy print(sqlalchemy.__version__) # 1.1.15 我這里使用的版本是1.1.15
from sqlalchemy import create_engine # 連接本地test數據庫 engine = create_engine("mysql://root:root@localhost/test?charset=utf8")
運行時會出錯,因為需要驅動庫,默認會調用MySQLdb。
ImportError: No module named "MySQLdb"
我們前面安裝了pymysql,因此完整的要這么寫:
engine = create_engine("mysql+pymysql://root:root@localhost/test?charset=utf8")
SQL語句查詢
result = engine.execute("select * from news") print(result.fetchall()) #[(1, "本機新聞標題"), (2, "今天的新聞"), (3, "新聞標題1"), (4, "新聞標題2"), (5, "元組新聞1"), (6, "元組新聞2")]
既然我們用ORM,就是為了少寫甚至不寫SQL語句。
ORM是數據表和對象之間的映射。
1、創(chuàng)建一個Infos.py文件,這個文件我們來做數據表的映射
from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() from sqlalchemy import Column, Integer, String class News(Base): # 表名稱 __tablename__ = "news" # news表里id字段 id = Column(Integer, primary_key=True, autoincrement=True) # news表里title字段 title = Column(String(length=255), nullable=False)
News類就是我們數據表news的映射(字段:id、title)。
2、使用
from sqlalchemy import create_engine from mappers.Infos import News from sqlalchemy.orm import sessionmaker # 連接本地test數據庫 engine = create_engine("mysql+pymysql://root:root@localhost/test?charset=utf8") # 創(chuàng)建會話 session = sessionmaker(engine) mySession = session() # 查詢結果集 result = mySession.query(News).all() print(result[0])
我們要注意最后的查詢結果,看看結果集中的元素長什么樣?^_^
<mappers.Infos.News object at 0x1050c6e80>
查詢處理的記錄都是對象。
只查詢第一條記錄
# 查詢第一條 result = mySession.query(News).first() print(result.title) #打印對象屬性 通過id字段查詢 # 查詢id為2的 result = mySession.query(News).filter_by(id=2).first() print(result.title) # 查詢id為2的 result = mySession.query(News).filter(News.id==2).first() 分頁查詢 # 分頁查詢 0,2 result = mySession.query(News).filter(News.id>1).limit(2).offset(0).all() print(result) 自定義過濾條件 # 自定義過濾條件 result = mySession.query(News).filter(text("id>:id")).params(id=2).all()
根據主鍵查詢
result = mySession.query(News).get(3) print(result.title)
# 新增 news = News(title="新增測試標題") mySession.add(news) mySession.commit() #修改 mySession.query(News).filter(News.id==7).update({"title":"修改之后的標題"}) mySession.commit()
前面方法我們是手動創(chuàng)建了一個名叫Infos.py的文件,然后定義了一個News類,把這個類作為和我們news數據表的映射。
from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() from sqlalchemy import Column, Integer, String class News(Base): # 表名稱 __tablename__ = "news" # news表里id字段 id = Column(Integer, primary_key=True, autoincrement=True) # news表里title字段 title = Column(String(length=255), nullable=False)
現在我們來看看sqlacodegen這個工具,自動生成像上面那樣的類文件。
1、安裝sqlacodegen
#cd 項目虛擬環(huán)境 #執(zhí)行 ./python3 -m pip install sqlacodegen
2、使用sqlacodegen生成案列
#注意還是在虛擬環(huán)境目錄下執(zhí)行 ./sqlacodegen --tables fund --outfile ../../mappers/Found.py mysql+pymysql://root:root@localhost/test?charset=utf8
關于“Python的ORM框架sqlalchemy如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。