物件關係模型 pony 參考

2021-08-15 17:53:28 字數 3040 閱讀 6528

近期使用了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提供給終端使用者使用 表示層 格式化資料,給應用層提供更好的介面 會話層 在兩個節點中建立連線,設定連線方式是全雙...