SQLalchemy属性在使用字符串变量动态创建表名和列名时出错



我遇到了一个问题,我需要创建一个新表和一个特定的列,因为我需要从一个常规的数据表到一个映射表做SELECT INTO。由于我在数据库中处理的数据的性质,表名和两个列名是动态的。

我尝试使用在SQLAlchemy中使用变量列标题的例子,但我仍然得到错误被提出。下面是基本代码:

RecIndex = # some string key value that changes
tableData = "Data-" + str(i)
tableName = f'Mapping{idx}'
colName = f'Voltage{i}-V{idx}'
col_list = ['Reading', 'Date', colName]
t_list = {TableData: [RecIndex, colName], tableName: [RecIndex, colName]}
table_list = []
for t_name, col_name in t_list.items():
t = Table(
t_name, metadata,
Column('Reading', Integer),
Column('Date', Date),
*[Column(name, Integer) for name in col_name]
)
table_list.append(t)
t1 = table_list[0]      # Mapping table
t2 = table_list[1]      # Data table
sel = t1.insert().from_select(col_list, t2.select().where(t2.c.colName > 0))  # FAILS HERE

然而,当我尝试构建sel变量时,它失败了,我得到这个错误消息:

Traceback(最近一次调用):文件"C:PythonPythonlibsite-packagessqlalchemysqlbase.py",第1201行,在getattr返回self._index(例子)

KeyError:"colName">

sel = t1.insert().from_select(col_list, t2.select().where(t2.c.)colName祝辞

0))

File "C:PythonPythonlibsite-packagessqlalchemysqlbase.py",第1203行,在getattrutil.raise_ (AttributeError(关键),replace_context =犯错)

File "C:PythonPythonlibsite-packagessqlalchemyutil pat.py",第207行,在raise_提高异常

AttributeError: colName

有人知道为什么它不工作吗?我将非常感谢任何帮助

在您的示例代码中,您通过变量的名称引用列,colName而不是变量的内容,即。"Voltage0-V2"。试试这样做:

sel = t1.insert().from_select(col_list, t2.select().where(getattr(t2.c, colName) > 0))

这只是内置的getattr:getattr

我认为dict风格的查找也支持ie。t2.c[colName],所以这也可能工作:

sel = t1.insert().from_select(col_list, t2.select().where(t2.c[colName] > 0))

相关内容

  • 没有找到相关文章

最新更新