SQLAlchemy模組的使用教程

2022-02-25 18:38:23 字數 3585 閱讀 6790

資料庫表是乙個二維表,包含多行多列。把乙個表的內容用python的資料結構表示出來的話,可以用乙個list表示多行,list的每乙個元素是tuple,表示一行記錄,比如,包含idnameuser表:

[

('1', '

michael'),

('2', '

bob'

), ('3

', '

adam')

]

python的db-api返回的資料結構就是像上面這樣表示的。

但是用tuple表示一行很難看出表的結構。如果把乙個tuple用class例項來表示,就可以更容易地看出表的結構來

class

user(object):

def__init__

(self, id, name):

self.id =id

self.name =name

[ user('1

', '

michael'),

user('2

', '

bob'

), user('3

', '

adam')

]

但是由誰來做這個轉換呢?所以orm框架應運而生。

在python中,最有名的orm框架是sqlalchemy。我們來看看sqlalchemy的用法。

首先通過easy_install或者pip安裝sqlalchemy:

$ easy_install sqlalchemy

然後,利用上次我們在mysql的test資料庫中建立的user表,用sqlalchemy來試試:

第一步,匯入sqlalchemy,並初始化dbsession:

#

匯入:from sqlalchemy import

column, string, create_engine

from sqlalchemy.orm import

sessionmaker

from sqlalchemy.ext.declarative import

declarative_base

#建立物件的基類:

base =declarative_base()

#定義user物件:

class

user(base):

#表的名字:

__tablename__ = '

user'#

表的結構:

id = column(string(20), primary_key=true)

name = column(string(20))

#初始化資料庫連線:

engine = create_engine('

mysql+mysqlconnector://root:password@localhost:3306/test')

#建立dbsession型別:

dbsession = sessionmaker(bind=engine)

以上**完成sqlalchemy的初始化和具體每個表的class定義。如果有多個表,就繼續定義其他class,例如school:

class

school(base):

__tablename__ = '

school

'id =...

name = ...

create_engine()用來初始化資料庫連線。sqlalchemy用乙個字串表示連線資訊:

#

你只需要根據需要替換掉使用者名稱、口令等資訊即可。

由於有了orm,我們向資料庫表中新增一行記錄,可以視為新增乙個user物件:

#

建立session物件:

session =dbsession()

#建立新user物件:

new_user = user(id='

5', name='

bob')#

新增到session:

session.add(new_user)

#提交即儲存到資料庫:

session.commit()

#關閉session:

session.close()

可見,關鍵是獲取session,然後把物件新增到session,最後提交並關閉。session物件可視為當前資料庫連線。

如何從資料庫表中查詢資料呢?有了orm,查詢出來的可以不再是tuple,而是user物件。sqlalchemy提供的查詢介面如下:

#

建立session:

session =dbsession()

#建立query查詢,filter是where條件,最後呼叫one()返回唯一行,如果呼叫all()則返回所有行:

user = session.query(user).filter(user.id=='5'

).one()

#列印型別和物件的name屬性:

print

'type:

', type(user)

print

'name:

', user.name

#關閉session:

session.close()

執行結果如下:

type: '__main__.user

'>name: bob

可見,orm就是把資料庫表的行與相應的物件建立關聯,互相轉換。

由於關聯式資料庫的多個表還可以用外來鍵實現一對多、多對多等關聯,相應地,orm框架也可以提供兩個物件之間的一對多、多對多等功能。

例如,如果乙個user擁有多個book,就可以定義一對多關係如下:

class

user(base):

__tablename__ = '

user

'id = column(string(20), primary_key=true)

name = column(string(20))

#一對多:

books = relationship('

book')

class

book(base):

__tablename__ = '

book

'id = column(string(20), primary_key=true)

name = column(string(20))

#「多」的一方的book表是通過外來鍵關聯到user表的:

user_id = column(string(20), foreignkey('

user.id

'))

當我們查詢乙個user物件時,該物件的books屬性將返回乙個包含若干個book物件的list。

orm框架的作用就是把資料庫表的一行記錄與乙個物件互相做自動轉換。

正確使用orm的前提是了解關聯式資料庫的原理。

python中sqlalchemy模組的使用二

廢話不多說,咱們直接上 1 使用in查詢 def use in session dbsession users session.query user filter user.name.in zhangsan lisi all print user for user in users 執行結果 sql...

flask 與 SQLAlchemy的使用

安裝模組 pip install flask sqlalchemy在單個python中與flask使用 檔名 manage.py from flask sqlalchemy import sqlalchemy from flask import flask user root password ro...

sqlalchemy 中 desc 的使用

是這樣 items item.query.order by item.date.desc all 而不是這樣 items item.query.order by desc item.date all 更不是說了一大堆sqlalchemy的查詢方式別人看半天也沒找到自己需要的。sqlalchemy 中...