0

我想在我的 MySQL 数据库中创建一个表,从一个随时间动态变化的字典。

字典如下所示,它指定了要创建的列的name+ 。type这是用户在项目运行之前填写的设置文件。

dct = {'ID':'String',
       'Benefit':'Float',
       'Premium':'Float'}

我知道如何通过在映射类中硬编码来创建它,如下所示:

from sqlalchemy import create_engine, Column, String, Float
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('mysql+mysqldb://...')

Base = declarative_base()

class Table(base):
    __tablename__ = 'example'

    id = Column(String(30), primary_key=True)
    benefit = Column(Float)
    Premium = Column(Float)

问题:如何在不硬编码名称和类型的情况下创建这些表,但从字典中减去这些表。

我还尝试从 dict 构造一个类:

class Policy:

    def __init__(self, dictionary):
        for k, v in dictionary.items():
            setattr(self, k, v)

但不知道如何进一步实施。

类似的问题

4

1 回答 1

2

从这里SQLAlchemy 创建动态表和列

from sqlalchemy import MetaData, Table, Column, Integer, String

postgresql_db = engine(...)

post_meta = MetaData(bind=postgresql_db.engine)

post_meta.reflect(only=['customers'])

connection = postgresql_db.engine.connect()

columns_names = ['id', 'fname', 'lname', 'age']
columns_types = [Integer, String, String, Integer]
primary_key_flags = [True, False, False, False]
nullable_flags = [False, False, False, False]

test = Table('customers', post_meta,
             *(Column(column_name, column_type,
                      primary_key=primary_key_flag,
                      nullable=nullable_flag)
               for column_name,
                   column_type,
                   primary_key_flag,
                   nullable_flag in zip(columns_names,
                                        columns_types,
                                        primary_key_flags,
                                        nullable_flags)))

test.create()
于 2021-03-15T18:00:59.583 回答