Python 訪問資料庫練習 SQLAlchemy

2021-10-09 19:30:57 字數 2445 閱讀 9776

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

安裝

$ pip install sqlalchemy

完整**:
# -*- coding: utf-8 -*-

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:admin@localhost:3306/test'

)# 建立dbsession型別:

dbsession = sessionmaker(bind=engine)

definsert2mysql()

:# 建立session物件:

session = dbsession(

)# 建立user物件:

new_user = user(id=

'5', name=

'bob'

)# 新增到session:

session.add(new_user)

# 提交即儲存到資料庫:

session.commit(

)# 關閉session:

session.close(

)def

select_userbyid

(userid)

:# 查詢

# 建立session:

session = dbsession(

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

user = session.query(user)

.filter

(user.

id== userid)

.one(

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

print

('type:'

,type

(user)

)print

('name:'

, user.name)

# 關閉session:

session.close(

)if __name__ ==

'__main__'

:# insert2mysql()

select_userbyid(5)

print

('ok!'

)

執行效果:

由於關聯式資料庫的多個表還可以用外來鍵實現一對多、多對多等關聯,相應地,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。

未完待續。。。

python 訪問資料庫

commit 提交 rollback 回滾 cursor用來執行命令的方法 callproc self,procname,args 用來執行儲存過程,接收的引數為儲存過程名和引數列表,返回值為受影響的行數 execute self,query,args 執行單條sql語句,接收的引數為sql語句本身...

訪問資料庫 訪問資料庫

程式執行的時候,資料都是在記憶體中的。當程式終止的時候,通常都需要將資料儲存到磁碟上,無論是儲存到本地磁碟,還是通過網路儲存到伺服器上,最終都會將資料寫入磁碟檔案。而如何定義資料的儲存格式就是乙個大問題。如果我們自己來定義儲存格式,比如儲存乙個班級所有學生的成績單 名字成績 michael99 bo...

python訪問ZODB資料庫

usr bin python2.4 myzodb.py import sys import os from zodb import filestorage from zodb import db import transaction class myzodb object def init self...