下面我有一些代碼連接到數據庫並運行查詢。此查詢運行,如果我衝它到數據庫瀏覽器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而不是執行,它也沒有工作嗎? –
沒有工作。不過,我可能會濫用它。 –