gpt4 book ai didi

python - flask sqlalchemy - 根据数据库中的列动态生成数据模型

转载 作者:行者123 更新时间:2023-12-03 16:56:10 26 4
gpt4 key购买 nike

有没有办法根据 Flask SQLAlchemy 的数据库表中的列动态生成数据库模型?

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

我目前明确声明所有列如下。

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 不是很熟悉,我尝试了以下操作,但出现如下错误,我不确定这是否是正确的方法。
could not assemble any primary key columns for mapped table
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)

任何帮助表示赞赏!

最佳答案

我想出了这个,以防万一有人需要。这真的很简单,使用辅助函数来获取表格的列标题,然后只需使用 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')

关于python - flask sqlalchemy - 根据数据库中的列动态生成数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55071172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com