1. 程式人生 > >Python的ORM框架SQLAlchemy使用入門(一)

Python的ORM框架SQLAlchemy使用入門(一)

不要放棄你的幻想。當幻想沒有的時候,你還可以生存,但是你雖生猶死。

建立實體類,生成資料庫架構

import os
import sys
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy import create_engine

# 建立物件的基類:
Base = declarative_base()

class
Person(Base):
__tablename__ = 'person' #在這裡我們定義person表的列 #請注意,每個欄位也是一個普通的Python例項屬性。 id = Column(Integer, primary_key=True) name = Column(String(250), nullable=False) class Address(Base): __tablename__ = 'address' #在這裡我們定義address表的列。 # 請注意,每個欄位也是一個普通的Python例項屬性 id = Column(Integer, primary_key=True
) street_name = Column(String(250)) street_number = Column(String(250)) post_code = Column(String(250), nullable=False) person_id = Column(Integer, ForeignKey('person.id')) person = relationship(Person) """建立引擎 儲存資料到本地目錄中SQLAlchemy的example.db檔案。""" engine = create_engine('sqlite:///sqlalchemy_example.db'
) """建立引擎中的所有表。這相當於“CREATE TABLE”原始的SQL語句。""" Base.metadata.create_all(engine)

錄入表資料

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from sqlalchemy_declarative import Address, Base, Person

engine = create_engine('sqlite:///sqlalchemy_example.db')
# 繫結引擎到Base類的元資料,使得宣告可通過DBSession例項來訪問
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
'''一個DBSession()例項建立與資料庫中的所有對話, 並展現一個“臨時區域”,載入所有物件到資料庫會話物件
直到呼叫session.commit(),否則對會話物件所做的任何更改將不會持久化到資料庫中。如果你對變化不滿意,
你可以恢復所有到上次操作,通過呼叫session.rollback()
'''
session = DBSession()

# 在Person表中插入一個Person
new_person = Person(name='new person')
session.add(new_person)
session.commit()

# 在address表中插入一個Address
new_address = Address(post_code='00000', person=new_person)
session.add(new_address)
session.commit()

增,查資料

from sqlalchemy_declarative import Person, Base, Address
from sqlalchemy import create_engine
import pdb;
from sqlalchemy.orm import sessionmaker

# 初始化資料庫連線:
engine = create_engine('sqlite:///sqlalchemy_example.db')
Base.metadata.bind = engine

DBSession = sessionmaker()
DBSession.bind = engine
session = DBSession()
print ("""===============================================""")
print(session.query(Person).all())
person = session.query(Person).first()
address = session.query(Address).filter(Address.person == person).one()
print(person.name)
print(address.post_code)
print("""==============================================""")
new_person = Person(name='john brown')
session.add(new_person)
session.commit()

#執行程式碼,程式會自動在pdb.set_trace()暫停並進入pdb除錯環境,可以用命令p檢視變數,或者用命令c繼續執行:
pdb.set_trace()

結果如圖:

這裡寫圖片描述