Python的ORM框架SQLAlchemy使用入門(一)
阿新 • • 發佈:2018-12-30
不要放棄你的幻想。當幻想沒有的時候,你還可以生存,但是你雖生猶死。
建立實體類,生成資料庫架構
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()