SQLAlchemy技術文件

2021-08-14 23:10:18 字數 3813 閱讀 8952

1.版本檢查

import sqlalchemy

sqlalchemy.version

2.連線

from sqlalchemy import create_engine

engine = create_engine(『sqlite:///:memory:』,echo=true)

echo引數為true時,會顯示每條執行的sql語句,可以關閉。create_engine()返回乙個engine的例項,並且它表示通過資料庫語法處理細節的核心介面,在這種情況下,資料庫語法將會被解釋稱python的類方法。

3.宣告映像

當使用orm時,構造程序首先描述資料庫的表,然後定義我們用來對映那些表的類。在現版本的sqlalchemy中,這兩個任務通常一起執行,通過使用declarative方法,我們可以建立一些包含描述要被對映的實際資料庫表的準則的對映類。

使用declarative方法定義的對映類依據乙個基類,這個基類是維繫類和資料表關係的目錄——我們所說的declarative base class。在乙個普通的模組入口中,應用通常只需要有乙個base的例項。我們通過declarative_base()功能建立乙個基類:

from sqlalchemy.ext.declarativeimportdeclarative_base

base = declarative_base()

有了這個base,我們可以依據這個base定義任意數量的對映類。乙個簡單的user例子:

from sqlalchemy import column, integer, string

class user(base):

tablename= 『users』

id= column(integer, primary_key=true)

name = column(string)

用declarative構造的乙個類至少需要乙個tablename屬性,乙個主鍵行。

4.構造模式(專案中沒用到)

5.建立對映類的例項

ed_user = user(name=』ed』,fullname=』ed jones』, password=』edspassword』)

6.建立會話

現在我們已經準備毫和資料庫開始會話了。orm通過session與資料庫建立連線的。當應用第一次載入時,我們定義乙個session類(宣告create_engine()的同時),這個session類為新的session物件提供工廠服務。

from sqlalchemy.orm import sessionmaker

session = sessionmaker(bind=engine)

這個定製的session類會建立繫結到資料庫的session物件。如果需要和資料庫建立連線,只需要例項化乙個session:

session = session()

雖然上面的session已經和資料庫引擎engine關聯,但是還沒有開啟任何連線。當它第一次被使用時,就會從engine維護的乙個連線池中檢索是否存在連線,如果存在便會保持連線知道我們提交所有更改並且/或者關閉session物件。

7.新增新物件(簡略)

ed_user = user(name=』ed』, fullname=』ed jones』, password=』edspassword』)

session.add(ed_user)

至此,我們可以認為,新新增的這個物件例項仍在等待中;ed_user物件現在並不代表資料庫中的一行資料。直到使用flush程序,session才會讓sql保持連線。如果查詢這條資料的話,所有等待資訊會被第一時間重新整理,查詢結果也會立即發行。

session.commit()

通過commit()可以提交所有剩餘的更改到資料庫。

8.回滾

session.rollback()

9.查詢

通過session的query()方法建立乙個查詢物件。這個函式的引數數量是可變的,引數可以是任何類或者是類的描述的集合。下面是乙個迭代輸出user類的例子:

for instance in session.query(user).order_by(user.id):

print instance.name,instance.fullname

query也支援orm描述作為引數。任何時候,多個類的實體或者是基於列的實體表達都可以作為query()函式的引數,返回型別是元組:

for name, fullname in session.query(user.name,user.fullname):

print name, fullname

query返回的元組被命名為keyedtuple類的例項元組。並且可以把它當成乙個普通的python資料類操作。元組的名字就相當於屬性的屬性名,類的類名一樣。

for row in session.query(user, user.name).all():

print row.user,row.name

9.1使用關鍵字變數過濾查詢結果,filter 和 filter_by都適用。使用很簡單,下面列出幾個常用的操作:

query.filter(user.name == 『ed』) #equals

query.filter(user.name != 『ed』) #not equals

query.filter(user.name.like(『%ed%』)) #like

uery.filter(user.name.in_([『ed』,』wendy』, 『jack』])) #in

query.filter(user.name.in_(session.query(user.name).filter(user.name.like(『%ed%』))#in

query.filter(~user.name.in_([『ed』,』wendy』, 『jack』]))#not in

query.filter(user.name == none)#is none

query.filter(user.name != none)#not none

from sqlalchemy import and_

query.filter(and_(user.name ==』ed』,user.fullname ==』ed jones』)) # and

query.filter(user.name == 『ed』,user.fullname ==』ed jones』) # and

query.filter(user.name == 『ed』).filter(user.fullname == 『ed jones』)# and

from sqlalchemy import or_

query.filter(or_(user.name ==』ed』, user.name ==』wendy』)) #or

query.filter(user.name.match(『wendy』)) #match

9.2.返回列表和數量(標量?)

all()返回乙個列表:可以進行python列表的操作。

query = session.query(user).filter(user.name.like(『%ed』)).order_by(user.id)

query.all()

>

for user, address in session.query(user, adalias).\

… join(adalias, user.addresses):

… print user

… print address

SQLAlchemy文件翻譯

想記錄一下sqlalchemy的入門學習,然後突發奇想覺得 為什麼不直接翻譯一下文件呢?於是順手查了查怎麼使用gitbook,2333 於是就在github開了專案,然後匯入了gitbook,開始寫。今天開始的,決定每天寫一部分,爭取早日完成。有感興趣的同學可以一起翻譯,一起學習,直接在github...

文件摘要技術

一 基於特徵的方法 可以考慮如下特徵來進行文件摘要的生成,包括 文章標題 比如文章標題中出現的詞具有較高的權重 段落的位置 比如文章的首段和尾段具有較高的權重 段落的特定句子 比如段落的首句和第二句具有較高的權重 句式的型別 比如陳述句具有較高的權重,含有大標點的句子具有較高的權中等 文章中頻繁出現...

技術文件 url

1乙個最小的物聯網系統設計方案及原始碼 2 簡明 python 教程 3.tython學習站 5 基於yii框架的開源 5.2 易框架學習平台 5.4 yii 日誌顯示mysql執行語句變數內容 5.5 yii ar很好很強大,但剛開始不知道怎麼使用 5.6yii 日誌與除錯 debug 7給yii...