动态创建一组 SQLAlchemy 表

non*_*gon 3 python sqlalchemy

我有一个用 SQLAlchemy 声明定义的简单表:

Base = declarative_base()
class MyTable(Base):
    __tablename__ = 'mytable1'
    row_id = Column(INT, primary_key=True)
    another_column = Column(CHAR(10))
Run Code Online (Sandbox Code Playgroud)

我想创建一组具有以下名称的表:

table_names = ('mytable1', 'mytable2', 'mytable3', 'mytable4')
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来创建这组表,所有表都具有相同的列定义(但每个都有自己的名称),而无需重复表定义?

The*_*nse 5

字典将是去这里的最佳方式。也许是这样的:

table_dict = {}
for i in range(4):   # Create
  table_name = "mytable" + str(i)
  table_dict[table_name] = MyTable(table_name)

for i in range(4):   # Query
  session.query(table_dict["mytable" + str(i)])
Run Code Online (Sandbox Code Playgroud)

类似的东西可能就是你正在寻找的。这也可以让您自动创建字典键,就像在 for 循环中一样。

编辑:我假设您正在创建MyTable类的实例,但再次查看似乎并非如此。我不知道 SQLAlchemy 的具体细节,但我猜你会想要MyTable使用该__init__函数创建实例。

编辑 编辑:如果你想创建多个表对象,你可以创建一个函数来生成并返回一个新类。也许是这样的:

Base = declarative_base()

def TableCreator(tablename):
  class MyTable(Base):
    __tablename__ = tablename
    row_id = Column(INT, primary_key=True)
    another_column = Column(CHAR(10))
  return MyTable
Run Code Online (Sandbox Code Playgroud)

然后你可以用mytable1 = TableCreator("mytable1").