Maison > Article > développement back-end > Quelles sont les méthodes d'implémentation pour modifier dynamiquement le nom de la table en python sqlalchemy ?
Dans l'ORM SQLAlchemy de Python, vous pouvez utiliser le code suivant pour modifier dynamiquement le nom de la table de la classe de modèle de données :
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'
Dans cet exemple, nous définissons d'abord un fichier nommé MyModel
data model et associez-le à la table my_custom_table_name
. Ensuite, si nécessaire, nous pouvons changer dynamiquement le nom de la table en accédant à l'attribut __table__
de la classe modèle. MyModel
的数据模型,并将其与my_custom_table_name
表相关联。然后,在必要时,我们可以通过访问模型类的__table__
属性来动态地更改表名。
这是因为ORM框架本身会自动为每个数据模型类创建一个对应的Table对象,并将其存储在该类的__table__
属性中。我们可以使用name
__table__
de la classe. Nous pouvons utiliser l'attribut name
pour mettre à jour directement le nom de cet objet afin de changer dynamiquement le nom de la table. Veuillez noter que la modification dynamique des noms de table peut affecter l'exactitude et la maintenabilité de votre application. Déterminez donc si vous avez vraiment besoin de le faire et comment planifier les modifications du schéma de base de données. Méthode 2Si notre classe d'origine est la suivante :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)Nous pouvons définir sa classe abstraite :
class MyModelCls(Base): __abstract__ = True # 关键语句,定义所有数据库表对应的父类 __table_args__ = {"extend_existing": True} # 允许表已存在 id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer)Ensuite, renvoyez l'objet de classe via la fonction🎜
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]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!