下面我有一些代码连接到数据库并运行查询。此查询运行,如果我冲它到数据库浏览器SQLite作为预期,但是当我在python运行它,我收到错误:将复杂的SQL查询翻译成Python 2 for SQLite3
sqlite3.OperationalError:没有这样的列:CHARACTER_INNATES.PC_ID
我已经阅读了一些关于参数的文档和多个StackOverflow评论,以及它们的目的,以防止注入攻击等问题。我尝试了那种散布'?'的方法。无处不在,使其无法读取,无法维护,而且无法正常工作。它返回一个空元组。这使我相信应该有更简单的方法来执行这些类型的SQL查询。那么在那里?还是我错过了明显的东西?
db = sqlite3.connect('TheGame.db')
db.text_factory = str
conn = db.cursor()
query = 'SELECT CHARACTERS.Full_Name, CHARACTER_INNATES.PC_ID, SKILLS_INNATES.Skill, Sum([CHARACTER_INNATES].[Current]*[Weight]) AS [Current Innate], Sum([CHARACTER_INNATES].[Maximum]*[Weight]) AS [Max Innate]\
FROM CHARACTERS INNER JOIN (SKILLS_INNATES INNER JOIN CHARACTER_INNATES ON SKILLS_INNATES.Innate = CHARACTER_INNATES.Innate) ON CHARACTERS.ID = CHARACTER_INNATES.PC_ID\
GROUP BY CHARACTERS.Full_Name, CHARACTER_INNATES.PC_ID, SKILLS_INNATES.Skill\
ORDER BY CHARACTER_INNATES.PC_ID, Sum([CHARACTER_INNATES].[Current]*[Weight]) DESC;'
conn.execute(query)
print conn.fetchall()
我在一个固定的尝试看起来像
params = ('CHARACTERS.Full_Name', 'CHARACTER_INNATES.PC_ID', ...) #this continued for awhile
query = 'SELECT ?, ?, ?, ...'
conn.execute(query, params)
print conn.fetchall() # prints empty tuple
通过任何机会,你已经尝试executemany而不是执行,它也没有工作吗? –
没有工作。不过,我可能会滥用它。 –