正確使用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...