python的ORM技巧記錄

2022-07-05 11:54:11 字數 2430 閱讀 5881

# -*- coding:utf-8 -*-

from sqlalchemy import create_engine, column, integer, string, foreignkey, index

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import relationship, sessionmaker

from django.db import models

base = declarative_base()

class hobby(base):

__tablename__ = 'hobby'

id = column(integer, primary_key = true)

caption = column(string(50), default = '籃球')

class person(base):

__tablename__ = 'person'

nid = column(integer, primary_key = true)

name = column(string(32), index = true, nullable = true)

hobby_id = column(integer, foreignkey("hobby.id"))

# hobby屬性不管有沒有資料庫都不會生成這個字段,該字段只作為屬性正向和反向關聯hobby

hobby = relationship("hobby", backref = 'pers')

# 建立連線池,pool_size限制連線數10個,max_overflow設定最多多2個連線,也就是最多12個連線。

engine = create_engine("mysql+pymysql:", max_overflow=2, pool_size=10)

session = sessionmaker(bind = engine)

# 從連線池中獲取連線

session = session()

# 查詢一,直接查詢表person的資料

obj1 = session.query(models.person).all()

for row in obj1:

print(row.name, row.hobby_id)

# 查詢二,person和hobby的關聯查詢,使用join方式

obj2 = session.query(models.person.name, models.hobby.caption).join(models.hobby, isouter = true).all()

for row in obj2:

print(row[0].name, row[1].caption)

# 查詢三,person和hobby的關聯查詢,使用relationship方式,正向關聯

obj3 = session.query(models.person).all()

for row in obj3:

print(row.name, row.hobby.caption)

# 查詢四,查詢喜歡籃球的所有人,使用relationship方式,反向向關聯

obj4 = session.query(models.hobby).filter(models.hobby.id == 2).first()

persons = obj4.pers

for row in persons:

print(row.name)

# 關閉資料庫連線

session.close()

***********************************===

#實現根據列表值拿到下標寫到資料庫

def enums(items):

enums_index = dict(enumerate(items))

class enums(object):

def __init__(self):

for v, i in enums_index.items():

setattr(self, i, v)

def __getitem__(self, val):

return enums_index.get(val)

def __iter__(self):

return iter(items)

return enums()

refreshstatus = enums([

"pending", "ready", "working", "commited", "successed",

"merged", "aborted", "failed", "exceed",

])print refreshstatus.ready

#列印出ready的index為1.

python指令碼使用Django的ORM

如果你想通過自己建立的python檔案在django專案中使用django的models,那麼就需要呼叫django的環境 import os if name main os.environ.setdefault django settings module bms.settings manage....

python經典orm框架sqlalchemy

在一般的專案中,簡單的訪問資料庫用pymysql就可以了,手寫一些sql也沒有什麼問題,但是對於乙個大型系統,可能面對多次的資料庫增刪改查操作,如果都用手寫sql實現,會顯得很難看,開發效率也比較低,這個時候就推薦使用orm框架了。python的orm框架有很多,我最早接觸的是django的內嵌or...

python 資料模型orm

在 init py增加,因為預設的mysqldb不支援python3 import pymysql pymysql.install as mysqldb 建立表from django.db import models create your models here.圖書管理系統,書 作者 出版社 出...