Python flask sqlalchemy-基于数据库中的列动态生成数据模型

Python flask sqlalchemy-基于数据库中的列动态生成数据模型,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,有没有一种方法可以根据Flask SQLAlchemy数据库表中的列动态生成db模型 我有一个应用程序来显示数据库表中的数据,但列名有时会更改,并破坏我的应用程序。我希望有一种根据数据库中的实际列名动态生成数据模型的方法 我目前明确声明所有列,如下所示 class MyDbModel(db.Model): __tablename__ = 'my_table' id = db.Column('id', db.NVARCHAR(length=300), primary_key=T

有没有一种方法可以根据Flask SQLAlchemy数据库表中的列动态生成db模型

我有一个应用程序来显示数据库表中的数据,但列名有时会更改,并破坏我的应用程序。我希望有一种根据数据库中的实际列名动态生成数据模型的方法

我目前明确声明所有列,如下所示

class MyDbModel(db.Model):

    __tablename__ = 'my_table'

    id = db.Column('id', db.NVARCHAR(length=300), primary_key=True)
    name= db.Column('name', db.NVARCHAR(length=300),
                          nullable=True)
我对sqlalchamy不是很熟悉,我尝试了以下方法,但得到了如下错误,我不确定这是否是正确的方法

无法为映射表组装任何主键列

from sqlalchemy import Table, Column
from sqlalchemy.orm import mapper

    db = SQLAlchemy()

    class MyDbModel(db.Model):
        __tablename__ = 'my_table'

        def __init__(self):
            #helper function to get column headers of a db table
            table_cols = get_headers_or_columns(
                'my_table'
            )
            t = Table(
                'my_table', db.metadata,
                Column('id', db.NVARCHAR(length=300), primary_key=True),
                *(Column(table_col, db.NVARCHAR(length=300)) for table_col in table_cols)
            )

            mapper(self, t)

感谢您的帮助

我想出来了,以防有人需要。非常简单,使用helper函数获取表的列标题,然后使用
setattr
设置类的属性

from app import db

class MyDbModel(db.Model):
        pass

def map_model_attrs(model, table):
    """
    :param model: your db Model Class
    :param table your db table name
    """

    table_cols = get_headers_or_columns(table)

    for col in table_cols:
        setattr(
            model, col, db.Column(col, db.NVARCHAR(length=300),
                                  nullable=True)
        )

map_mode_attrs(MyDbModel, 'my_table')