主頁(yè) > 知識(shí)庫(kù) > Python流行ORM框架sqlalchemy的簡(jiǎn)單使用

Python流行ORM框架sqlalchemy的簡(jiǎn)單使用

熱門(mén)標(biāo)簽:鐵路電話系統(tǒng) 網(wǎng)站文章發(fā)布 檢查注冊(cè)表項(xiàng) 智能手機(jī) 呼叫中心市場(chǎng)需求 服務(wù)器配置 美圖手機(jī) 銀行業(yè)務(wù)

安裝

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,因此完整的要這么寫(xiě):

engine = create_engine("mysql+pymysql://root:root@localhost/test?charset=utf8")

簡(jiǎn)單使用

SQL語(yǔ)句查詢(xún)

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,就是為了少寫(xiě)甚至不寫(xiě)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):
# 表名稱(chēng)
__tablename__ = 'news'
# news表里id字段
id = Column(Integer, primary_key=True, autoincrement=True)
# news表里title字段
title = Column(String(length=255), nullable=False)

News類(lèi)就是我們數(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()
# 查詢(xún)結(jié)果集
result = mySession.query(News).all()
print(result[0])

我們要注意最后的查詢(xún)結(jié)果,看看結(jié)果集中的元素長(zhǎng)什么樣?^_^

mappers.Infos.News object at 0x1050c6e80>

查詢(xún)處理的記錄都是對(duì)象。

各種查詢(xún)

只查詢(xún)第一條記錄

# 查詢(xún)第一條
result = mySession.query(News).first()
print(result.title) #打印對(duì)象屬性
通過(guò)id字段查詢(xún)

# 查詢(xún)id為2的
result = mySession.query(News).filter_by(id=2).first()
print(result.title)
# 查詢(xún)id為2的
result = mySession.query(News).filter(News.id==2).first()
分頁(yè)查詢(xún)

# 分頁(yè)查詢(xún) 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ù)主鍵查詢(xún)

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í)體類(lèi)示例

前面方法我們是手動(dòng)創(chuàng)建了一個(gè)名叫Infos.py的文件,然后定義了一個(gè)News類(lèi),把這個(gè)類(lèi)作為和我們news數(shù)據(jù)表的映射。

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
from sqlalchemy import Column, Integer, String
class News(Base):
# 表名稱(chēng)
__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)生成像上面那樣的類(lèi)文件。

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)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python數(shù)據(jù)庫(kù)如何連接SQLite詳解
  • python實(shí)現(xiàn)sqlalchemy的使用概述
  • python中的mysql數(shù)據(jù)庫(kù)LIKE操作符詳解
  • Python3 MySQL 數(shù)據(jù)庫(kù)連接的使用示例
  • python配置mssql連接的方法
  • python 操作sqlite數(shù)據(jù)庫(kù)的方法
  • 適合Python項(xiàng)目的五大SQL連接器

標(biāo)簽:河南 樂(lè)山 新疆 上海 長(zhǎng)治 沈陽(yáng) 滄州 紅河

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python流行ORM框架sqlalchemy的簡(jiǎn)單使用》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢(xún)

    • 400-1100-266