Python 动态创建一组SQLAlchemy表

Python 动态创建一组SQLAlchemy表,python,sqlalchemy,Python,Sqlalchemy,我有一个使用SQLAlchemy声明性定义的简单表: Base = declarative_base() class MyTable(Base): __tablename__ = 'mytable1' row_id = Column(INT, primary_key=True) another_column = Column(CHAR(10)) 我想创建一组具有以下名称的表: table_names = ('mytable1', 'mytable2', 'mytable

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

Base = declarative_base()
class MyTable(Base):
    __tablename__ = 'mytable1'
    row_id = Column(INT, primary_key=True)
    another_column = Column(CHAR(10))
我想创建一组具有以下名称的表:

table_names = ('mytable1', 'mytable2', 'mytable3', 'mytable4')

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

字典是最好的方法。也许是这样的:

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)])
像这样的东西可能就是你想要的。这还可以让您自动创建字典键,就像在for循环中一样

编辑:我假设您正在创建
MyTable
类的实例,但再看一眼,情况似乎并非如此。我不知道SQLAlchemy的具体细节,但我猜您可能希望使用
\uuuuu init\uuuu
函数创建
MyTable
实例

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

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

然后您可以使用
mytable1=TableCreator(“mytable1”)
调用它

您不应该使用数据,尤其是重要数据来命名变量。您应该将这些表存储在字典中。@TheSoundDefense,我不确定我是否遵循了-我重新提出了这个问题,以便更清楚地说明我只是在寻找一种方法来定义一组具有不同名称但具有相同列定义的表-为避免混淆,我确实在寻找一种使用SQLAlchemy定义这些表的方法。我是新手,我找不到一个简单的方法。我对问题进行了编辑,以使其更加清楚。