Python是一種強大的編程語言,它可以通過SQLAlchemy這個ORM工具來操作數據庫。在SQLAlchemy中,聯表查詢是一件非常常見的事情,下面我們來看一下具體的實現方法。
from sqlalchemy import create_engine, Column from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy.sql import text from datetime import datetime # 創建引擎 engine = create_engine('postgresql://username:password@localhost:5432/dbname') # 創建會話 Session = sessionmaker(bind=engine) session = Session() # 定義基礎類 Base = declarative_base() # 定義User類 class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) email = Column(String) password = Column(String) posts = relationship('Post', back_populates='author') # 定義Post類 class Post(Base): __tablename__ = 'posts' id = Column(Integer, primary_key=True) title = Column(String) content = Column(String) created_at = Column(DateTime, default=datetime.utcnow) author_id = Column(Integer, ForeignKey('users.id')) author = relationship('User', back_populates='posts') # 聯表查詢 stmt = text("SELECT * FROM users JOIN posts ON users.id = posts.author_id WHERE users.id = :user_id") result = session.execute(stmt, {'user_id': 1}) for row in result: print(row)
以上代碼中,我們首先通過create_engine創建了一個PostgreSQL的引擎,然后通過sessionmaker創建了一個會話對象。接著,我們定義了兩個類User和Post,它們之間建立了一對多的關系。最后,我們使用純SQL的方式進行聯表查詢,并將結果打印出來。
在實際項目中,我們建議使用SQLAlchemy的Query對象來完成聯表查詢。Query對象可以方便地進行鏈式操作,并且生成的SQL語句更加易讀。