標籤:
所謂的ORM就是Object-Relational Mapping,把關聯式資料庫的表結果映射到對象上。
1. 安裝SQLAlchemy:
easy_install sqlalchemy
2. 匯入SQLAlchemy,並初始化DBSession:
# 匯入:from sqlalchemy import Column, String, create_enginefrom sqlalchemy.orm import sessionmakerfrom sqlalchemy.ext.declarative import declarative_base# 建立對象的基類:Base = declarative_base()# 定義User對象:class User(Base): # 表的名字: __tablename__ = 'user' # 表的結構: id = Column(String(20), primary_key=True) name = Column(String(20))# 初始化資料庫連接:# '資料庫類型+資料庫驅動名稱://使用者名稱:口令@機器地址:連接埠號碼/資料庫名'engine = create_engine('mysql+mysqlconnector://root:[email protected]:3306/test')# 建立DBSession類型:DBSession = sessionmaker(bind=engine)
3. 往資料庫表中添加一行記錄:
# 建立session對象:session = DBSession()# 建立新User對象:new_user = User(id='5', name='Bob')# 添加到session:session.add(new_user)# 提交即儲存到資料庫:session.commit()# 關閉session:session.close()
4. 從資料庫中查詢資料
# 建立Session:session = DBSession()# 建立Query查詢,filter是where條件,最後調用one()返回唯一行,如果調用all()則返回所有行:user = session.query(User).filter(User.id=='5').one()# 列印類型和對象的name屬性:print 'type:', type(user)print 'name:', user.name# 關閉Session:session.close()
5. 建立一個一對多的關係:
一個人有多本書:當我們查詢一個User對象時,該對象的books屬性將返回一個包含若干個Book對象的list
class User(Base): __tablename__ = 'user' id = Column(String(20), primary_key=True) name = Column(String(20)) # 一對多: books = relationship('Book')class Book(Base): __tablename__ = 'book' id = Column(String(20), primary_key=True) name = Column(String(20)) # “多”的一方的book表是通過外部索引鍵關聯到user表的: user_id = Column(String(20), ForeignKey('user.id'))
python學習筆記(十六) - ORM架構(SQLAlchemy)