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 ?

Quelles sont les méthodes d'implémentation pour modifier dynamiquement le nom de la table en python sqlalchemy ?

PHPz
PHPzavant
2023-04-28 09:58:061799parcourir

Méthode 1

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

En effet, le framework ORM lui-même créera automatiquement un objet Table correspondant pour chaque classe de modèle de données et le stockera dans l'attribut __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 2

Si 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer