在SQLAlchemy ORM中動態變更表名


在開發過程中,經常會遇到幾張表結構相同,僅僅表名不一樣。這在直接使用SQL語句進行查詢的環境中處理起來很簡單,但如果使用了SQLAlchemy ORM之后,因在model定義時就確定了表名,就需要用其他方法進行表名的變更。

 

假定數據庫中有兩張表:user,user_1,下面用一個簡單程序展示如何在查詢時變更表名。

 

 使用declarative_base定義的model

from sqlalchemy import create_engine

from sqlalchemy import Table, Column, Integer, String, MetaData

from sqlalchemy.orm import sessionmaker

metadata = MetaData()

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()



class User(Base):

    __tablename__ = 'users'

    __table_args__ = {

        'mysql_engine': 'InnoDB',

        'mysql_charset': 'utf8'

    }
    id = Column(Integer, primary_key=True)

    name = Column(String(30))

    fullname = Column(String(120))

    password = Column(String(30))



engine = create_engine('mysql://root:@127.0.0.1/test?charset=utf8', echo=True)

Session = sessionmaker(bind=engine)

session = Session()

 

查詢表1

user = session.query(User).filter(User.name=='myname').all()

 

查詢表2

User.__table__.name = 'users_1'

user = session.query(User).filter(User.name=='myname').all()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM