近期使用了python 的 orm ——pony,特記錄以下供參考:
pony與其它的orm相比,可謂別具一格,顯得有點另類,主要以迭代器方式實現,寫起來覺得與sql無關,更像基本的純python**;而且其官方文件清晰。
一、使用pony的基本步驟
1.定義orm模型
from pony.orm import *
db = database()
class person(db.entity):
name = required(str, 8)
age = required(int)
2.繫結資料庫
pony同時支援四種資料庫哦,即sqlite、mysql、postgresql、oracle。
db.bind(provider = 'sqlite',filename='a.db',create_db = true)
3.查詢操作
p = person(name='john',age=23)
commit() #提交
select(p for p in person if p.age>13)
p.age=15
commit()
p.delete()
commit()
二、重要參考
1.定義列可使用required/optional/primarykey/set等。set用於定義關係。
2.資料型別常用的主要有str/int/float/decimal/datetime/date/time/timedelta/bool/json/bytes。
3.資料型別的常用可選引數:unique/auto(主鍵可用)/autostrip/column(指定列名)/default(numeric|str|function)/max/min/py_check(function)/reverse/size(int)。
4.可定義類屬性_table_自定義表名。
5.實體類中可定義鉤子方法after_delete/after_insert/after_update/before_delete/before_insert/before_update。
6.關係的定義
# 1-1
class person(db.entity):
passport = optional("passport")
class passport(db.entity):
person = required(person)
# 1-n
class order(db.entity):
items = set('orderitem')
class orderitem(db.entity):
order = required(order)
# order = optional(order)
# n-n
class stud(db.entity):
select = set('course')
class course(db.entity):
stud = set(order)
7.繫結資料庫(要安裝指定的資料庫連線庫)
#postgresql
db.bind(provider='postgres',user='',password='',host='',database='')
#mysql
db.bind(provider='mysql',user='',passwd='',host='',db='')
8.可以使用db_session作為裝飾器或上下文管理器進入資料庫的增、刪、改操作而不用顯式呼叫commit();
9.查詢
#用主鍵查詢單個實體
person[2]
#用具有unique屬性查詢
person.get(name='john')
#有多個結果的查詢
#返回迭代器,可以迭代處理結果
select(p for p in person if p.age > 10)
#返回列表
select(p for p in person if p.age > 10)[:]
#返回指定頁
select(p for p in person if p.age > 10).page(1,pagesize=10)
#返回查詢得到的首個物件(無則返回none)
select(p for p in person if p.age > 10).first()
#返回查詢得到物件的屬性的迭代器
select(p.name for p in person if p.age > 10)
#修改物件屬性
p.age=19
p.set(age=19,...)
p.set(**)
此外,關於資料查詢中的一些聚合函式也可以使用。
補:連線多個資料庫**自
def define_entities(db):
class foo(db.entity):
...class bar(db.entity):
...def open_database(filename):
db = database()
define_entities(db)
db.bind('sqlite', filename)
return db
### file main.py
db1 = open_database('db1.sqlite')
db2 = open_database('db2.sqlite')
with db_session:
foos = select(foo for foo in db1.foo if )[:]
bars = select(bar for bar in db2.bar if )[:]
關係模型關係模型
關係模型研究的內容 乙個關係就是乙個table,關係模型就是處理table的 在處理table時涉及到以下內容 關係模型三要素 表 關係 下圖是對一張表的定義,我們稱表也為關係。域 所有可取的列值構成的集合。域的笛卡爾積的子集被成為關係。下圖表示了使用關係模式對關係進行描述,關係模式中的a1是屬性名...
OSI RM參考模型和TCP IP協議的關係
osi rm參考模型的提出 世界上第乙個網路體系結構由ibm公司提出 74年,sna 以後其他公司也相繼提出自己的網路體系結構如 digital公司的dna,美國國防部的tcp ip等,多種網路體系結構並存,其結果是若採用ibm的結構,只能選用ibm的產品,只能與同種結構的網路互聯。為了促進計算機網...
OSI參考模型與TCP IP參考模型
與osi參考模型相比,tcp ip參考模型沒有表示層和會話層。網際網路層相當於osi模型的網路層,主機至網路層相當於osi模型中的物理層和資料鏈路層 應用層 email ftp http提供給終端使用者使用 表示層 格式化資料,給應用層提供更好的介面 會話層 在兩個節點中建立連線,設定連線方式是全雙...