欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Python的ORM框架sqlalchemy如何使用

這篇文章主要介紹“Python的ORM框架sqlalchemy如何使用”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Python的ORM框架sqlalchemy如何使用”文章能幫助大家解決問題。

創(chuàng)新互聯(lián)是一家專業(yè)提供靜樂企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為靜樂眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

安裝

1、安裝

#進(jìn)入虛擬環(huán)境
#執(zhí)行
./python3 -m pip install

import sqlalchemy
print(sqlalchemy.__version__) # 1.1.15
我這里使用的版本是1.1.15

創(chuàng)建連接對(duì)象

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語句查詢

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語句。

ORM是數(shù)據(jù)表和對(duì)象之間的映射。

1、創(chuàng)建一個(gè)Infos.py文件,這個(gè)文件我們來做數(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ì)象屬性
通過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)
自定義過濾條件

# 自定義過濾條件
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)在我們來看看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如何使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

網(wǎng)站欄目:Python的ORM框架sqlalchemy如何使用
當(dāng)前URL:http://chinadenli.net/article36/gpdepg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、軟件開發(fā)營(yíng)銷型網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站