• 技术文章 >后端开发 >Python教程

    python sqlalchemy动态修改tablename实现方式有哪些

    PHPzPHPz2023-04-28 09:58:06转载54

    方式一

    在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中文网其它相关文章!

    声明:本文转载于:亿速云,如有侵犯,请联系admin@php.cn删除
    专题推荐:Python sqlalchemy
    上一篇:Python怎么将bmp格式的图片批量转成jpg 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 微软新必应还在队列排队吗?可以试试这款 AI 生产力工具• Python怎么使用EasyOCR工具识别图像文本• Python竟然还可以计算农历!• python中取反操作符怎么使用• python链表的反转方式是什么
    1/1

    PHP中文网