ORM(關係物件對映)框架之物件導向

2022-05-16 09:45:59 字數 4369 閱讀 2385

1. 提取共性

2. 分類

3. 模板「約束」

4. 當一類函式公用同樣引數時候,可以轉變成類進行 - 分類

3. 物件導向: 資料和邏輯(屬性和行為)組合在一起

函式程式設計:資料和邏輯分離

1

特殊方法:

2class

foo:

3def

__init__

(self,name):

4 self.name =name56

7def

show(self):

8print

(self.name)910

def__call__

(self):

11pass

1213

def__getitem__

(self,key):

14pass

1516

def__setitem__

(self,key,value):

17pass

1819

def__delitem__

(self,key):

20pass

2122 obj1 = foo('

eric')

2324

obj1()

25 obj1['k'

]26 obj1['

k'] = 123

27del

obj[k]

28 obj.__dict__

>>>>>>>>>>>>>>>>>>>物件後面直接加括號呼叫call方法 python特有的

sqlalchemy的增刪改查操作:

1

import

pymysql

2from sqlalchemy.ext.declarative import

declarative_base

3from sqlalchemy import

column, integer, string, foreignkey, uniqueconstraint,index

4from sqlalchemy.orm import

sessionmaker, relationships

5from sqlalchemy import

create_engine

67 base =declarative_base()8#

建立表9

defcreate_db():

10 engine = create_engine("

mysql+pymysql:

", max_overflow=5)

11base.metadata.create_all(engine)12#

刪除表13

defdrop_db():

14 engine = create_engine("

mysql+pymysql:

", max_overflow=5)

15base.metadata.drop_all(engine)

1617

18class

userinfo(base):

19__tablename__ = '

userinfo

'20 id = column(integer, primary_key=true, autoincrement=true)

21 name = column(string(36), nullable=true)

22 age =column(integer)

23 email = column(string(20), index=true)

24 utp_id = column(integer, foreignkey('

usertype.uid'))

2526

__table_args__ =(

27 uniqueconstraint('

id', '

email

', name='

ix_id_mail'),

28 index('

mail_name

','email

','utp_id'),

29)3031

def__repr__

(self):

32return

"%s-%s-%s

" %(self.name,self.age,self.email)

3334

class

usertype(base):

35__tablename__ = '

usertype

'36 uid = column(integer, primary_key=true, autoincrement=true)

37 title = column(string(30), nullable=true, index=true)

3839

#插入資料

4041 engine = create_engine("

mysql+pymysql:

", max_overflow=5)

42 session=sessionmaker(bind=engine)

43 session=session()44#

obj1=userinfo(name='kevin',age=18,email='[email protected]')45#

ses.add(obj1)46#

類--->表47#

物件---->行

4849

#objs=[50#

usertype(title='普通會員'),51#

usertype(title='銀牌會員'),52#

usertype(title='**會員'),53#

usertype(title='鑽石會員'),54#

]55#session.add_all(objs) #記錄寫入表中

5657#查詢

58#type_list=session.query(usertype).all()59#

print(session.query(usertype)) #查詢select sql語句60#

select usertype.uid as usertype_uid, usertype.title as usertype_title from usertype61#

for row in type_list:62#

print(row.uid,row.title)

6364#刪除

65#info_list=session.query(userinfo).filter(userinfo.id>2).delete()66#

for row in info_list:67#

print(row.name,row.email)

6869

#修改 字串的修改70#

info_list=session.query(userinfo).filter(userinfo.id>0).update(,synchronize_session=false)

7172

#進行數字的計算

73 info_list=session.query(userinfo).filter(userinfo.id>0).update(,synchronize_session='

evaluate')

7475 session.commit() #

提交76

session.close()

7778 create_db()

子查詢操作:

1

#s1=session.query(userinfo).filter(userinfo.id>2)2#

s2=session.query(usertype).filter(usertype.uid<2)3#

ret1=s1.union(s2).all() #兩次結果連線自動去重4#

ret2=s1.union_all(s2).all() #兩次結果連線全部值 不去重

5 ret=session.query(usertype,session.query(userinfo).filter(userinfo.age>20).subquery())6#

ret=session.query(usertype.uid,session.query(userinfo).filter(userinfo.id==usertype.uid).as_scalar())

7print(ret)

物件關係對映(ORM)

本文主要介紹物件關係對映 orm 是什麼,以及它的優缺點。物件導向是從軟體工程基本原則 如耦合 聚合 封裝 的基礎上發展起來的,而關聯式資料庫則是從數學理論發展而來的,兩套理論存在顯著的區別。為了解決這個不匹配的現象,物件關係對映技術應運而生。圖 1 物件關係對映功能圖 orm 基於三個核心原則 讓...

ORM物件關係對映

資料庫查詢幫助類庫 自動生成sql 通用 public class sqlhelper using sqlconnection conn new sqlconnection configrationmanager.sqlconnectionstring 用來完成sql語句的快取 每張表都是幾個固定s...

物件關係對映 ORM

1 建立表,修改表,刪除表 2 插入資料 3 修改資料 4 刪除資料 注 不能建立庫,在連線mysql前確保庫先建立好 類名 表 物件 一條資料 屬性 字段 class userinfo models.model nid models.autofield primary key true 自增主鍵 ...