Python flask sqlalchemy-基于数据库中的列动态生成数据模型
有没有一种方法可以根据Flask SQLAlchemy数据库表中的列动态生成db模型 我有一个应用程序来显示数据库表中的数据,但列名有时会更改,并破坏我的应用程序。我希望有一种根据数据库中的实际列名动态生成数据模型的方法 我目前明确声明所有列,如下所示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
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')