【发布时间】:2021-03-18 05:24:37
【问题描述】:
我已经编写了几个函数来获取特定的数据项,如下所示:
def get_short_desc(self, part_num):
sql = 'SELECT impShortDescription FROM Parts '
sql += 'WHERE impPartID LIKE ?'
self.cursor.execute(sql, [part_num])
item = self.cursor.fetchone().impShortDescription
return item
我想将函数参数化,所以我不会重复自己(DRY):
def get_part_entry_item(self, var, part_num):
sql = 'SELECT ? FROM Parts '
sql += 'WHERE impPartID LIKE ?'
self.cursor.execute(sql, [var, part_num])
item = getattr(self.cursor.fetchone(), var)
return item
execute 语句使用单引号传递part_num(字符串)的值,这是正确的。当列名变量var = 'impShortDescription' 生成的SQL 是有效的SELECT 'impShortDescription'... 所以返回的项目是
('impShortDescription', )
所以getattr(self.cursor.fetchone(), var) 导致错误
AttributeError: 'pyodbc.Row' object has no attribute 'impShortDescription'
如何传递不带引号的列名?
【问题讨论】:
标签: python sql variables pyodbc