Python流行ORM框架sqlalchemy的簡(jiǎn)單使用
安裝
http://docs.sqlalchemy.org
1、安裝
#進(jìn)入虛擬環(huán)境 #執(zhí)行 ./python3 -m pip install import sqlalchemy print(sqlalchemy.__version__) # 1.1.15 我這里使用的版本是1.1.15
創(chuàng)建連接對(duì)象
http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#connecting
from sqlalchemy import create_engine # 連接本地test數(shù)據(jù)庫(kù) engine = create_engine("mysql://root:root@localhost/test?charset=utf8")
運(yùn)行時(shí)會(huì)出錯(cuò),因?yàn)樾枰?qū)動(dòng)庫(kù),默認(rèn)會(huì)調(diào)用MySQLdb。
ImportError: No module named 'MySQLdb'
我們前面安裝了pymysql,因此完整的要這么寫:
engine = create_engine("mysql+pymysql://root:root@localhost/test?charset=utf8")
簡(jiǎn)單使用
SQL語(yǔ)句查詢
result = engine.execute("select * from news") print(result.fetchall()) #[(1, '本機(jī)新聞標(biāo)題'), (2, '今天的新聞'), (3, '新聞標(biāo)題1'), (4, '新聞標(biāo)題2'), (5, '元組新聞1'), (6, '元組新聞2')]
創(chuàng)建映射
既然我們用ORM,就是為了少寫甚至不寫SQL語(yǔ)句。
ORM是數(shù)據(jù)表和對(duì)象之間的映射。
http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#declare-a-mapping
1、創(chuàng)建一個(gè)Infos.py文件,這個(gè)文件我們來(lái)做數(shù)據(jù)表的映射
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類就是我們數(shù)據(jù)表news的映射(字段:id、title)。
2、使用
from sqlalchemy import create_engine from mappers.Infos import News from sqlalchemy.orm import sessionmaker # 連接本地test數(shù)據(jù)庫(kù) engine = create_engine("mysql+pymysql://root:root@localhost/test?charset=utf8") # 創(chuàng)建會(huì)話 session = sessionmaker(engine) mySession = session() # 查詢結(jié)果集 result = mySession.query(News).all() print(result[0])
我們要注意最后的查詢結(jié)果,看看結(jié)果集中的元素長(zhǎng)什么樣?^_^
<mappers.Infos.News object at 0x1050c6e80>
查詢處理的記錄都是對(duì)象。
各種查詢
只查詢第一條記錄
# 查詢第一條 result = mySession.query(News).first() print(result.title) #打印對(duì)象屬性 通過(guò)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() 分頁(yè)查詢 # 分頁(yè)查詢 0,2 result = mySession.query(News).filter(News.id>1).limit(2).offset(0).all() print(result) 自定義過(guò)濾條件 # 自定義過(guò)濾條件 result = mySession.query(News).filter(text("id>:id")).params(id=2).all()
根據(jù)主鍵查詢
result = mySession.query(News).get(3) print(result.title)
新增和修改
# 新增 news = News(title="新增測(cè)試標(biāo)題") mySession.add(news) mySession.commit() #修改 mySession.query(News).filter(News.id==7).update({"title":"修改之后的標(biāo)題"}) mySession.commit()
Python利用sqlacodegen自動(dòng)生成ORM實(shí)體類示例
前面方法我們是手動(dòng)創(chuàng)建了一個(gè)名叫Infos.py的文件,然后定義了一個(gè)News類,把這個(gè)類作為和我們news數(shù)據(jù)表的映射。
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)
現(xiàn)在我們來(lái)看看sqlacodegen這個(gè)工具,自動(dòng)生成像上面那樣的類文件。
1、安裝sqlacodegen
#cd 項(xiàng)目虛擬環(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
到此這篇關(guān)于Python流行ORM框架sqlalchemy的文章就介紹到這了,更多相關(guān)Python ORM框架sqlalchemy內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python批量刪除只保留最近幾天table的代碼實(shí)例
今天小編就為大家分享一篇關(guān)于Python批量刪除只保留最近幾天table的代碼實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04使用python把json文件轉(zhuǎn)換為csv文件
這篇文章主要介紹了使用python把json文件轉(zhuǎn)換為csv文件,幫助大家更好的利用python處理數(shù)據(jù),感興趣的朋友可以了解下2021-03-03Python+PyQt5實(shí)現(xiàn)自動(dòng)點(diǎn)擊神器
這篇文章主要為大家詳細(xì)介紹了如何利用Python和PyQt5實(shí)現(xiàn)自動(dòng)點(diǎn)擊神器,旨在解決重復(fù)性的點(diǎn)擊工作,解放雙手,具有及時(shí)性和準(zhǔn)確性,需要的可以參考下2024-01-01使用pickle存儲(chǔ)數(shù)據(jù)dump 和 load實(shí)例講解
今天小編就為大家分享一篇使用pickle存儲(chǔ)數(shù)據(jù)dump 和 load實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12使用PyTorch將文件夾下的圖片分為訓(xùn)練集和驗(yàn)證集實(shí)例
今天小編就為大家分享一篇使用PyTorch將文件夾下的圖片分為訓(xùn)練集和驗(yàn)證集實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01Win10下安裝并使用tensorflow-gpu1.8.0+python3.6全過(guò)程分析(顯卡MX250+CUDA9.
這篇文章主要介紹了Win10下安裝并使用tensorflow-gpu1.8.0+python3.6全過(guò)程(顯卡MX250+CUDA9.0+cudnn),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02