首頁  >  文章  >  後端開發  >  python sqlalchemy動態修改tablename實作方式有哪些

python sqlalchemy動態修改tablename實作方式有哪些

PHPz
PHPz轉載
2023-04-28 09:58:061728瀏覽

方式一

在Python的SQLAlchemy ORM中,您可以使用下列程式碼動態地變更資料模型類別的表名:

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class MyModel(Base):
    __tablename__ = 'my_custom_table_name'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)
#... 其它定义或使用...
# 动态修改表名
MyModel.__table__.name = 'my_new_table_name'

在這個範例中,我們先定義了一個名為MyModel的資料模型,並將其與my_custom_table_name表相關聯。然後,在必要時,我們可以透過存取模型類別的__table__屬性來動態地變更表名。

這是因為ORM框架本身會自動為每個資料模型類別建立一個對應的Table對象,並將其儲存在該類別的__table__屬性中。我們可以使用name屬性直接更新此物件的名稱,從而實現動態更改表名的目的。

請注意,動態變更表名可能會影響到您的應用程式的正確性和可維護性。因此,請考慮清楚是否真正需要這樣做,以及如何規劃資料庫模式的變更。

方式二

如果我們原先的class為此:

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class MyModel(Base):
    __tablename__ = 'my_custom_table_name'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

我們可以定義其抽象類別:

class MyModelCls(Base):
    __abstract__ = True  # 关键语句,定义所有数据库表对应的父类
    __table_args__ = {"extend_existing": True}  # 允许表已存在
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

然後透過函數傳回class物件

def get_source_data_model_cls(cid, cid_class_dict={}):
    if cid not in cid_class_dict:
        cls_name = table_name = cid
        cls = type(cls_name, (MyModelCls, ), {'__tablename__': table_name})
        cid_class_dict[cid] = cls
    return cid_class_dict[cid]

以上是python sqlalchemy動態修改tablename實作方式有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除