0
我基本明白,如果沒有列出變量,我的SQL語句將不會運行,因爲我想要做的是檢查名稱在寫入之前就存在了(我可以在SQL中做這個)。我理解這個問題,而不是如何糾正它......在現在是晚上9點30分之前,我想問問問題,我仍然在深入研究這個問題。由於我需要在sql查詢中運行if語句,提供變量或爲空
app.py
import sqlite3
from sqlalchemy.orm import sessionmaker
from tabledef import *
engine = create_engine('sqlite:///tutorial.db', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
USERNAME = "Jas"
PASSWORD = "Booger"
EMAIL = "[email protected]"
AMOUNT = "500"
reg = User(USERNAME, PASSWORD, EMAIL, AMOUNT)
conn = sqlite3.connect("tutorial.db")
c = conn.cursor()
try:
c.execute('SELECT username from users WHERE username = "%s"' % USERNAME)
result = str(c.fetchall()).split("'")[1]
print result
except ValueError as e:
print e
錯誤消息
Traceback (most recent call last):
File "C:/Users/sysadmin/PycharmProjects/bet1/app3.py", line 18, in <module>
result = str(c.fetchall()).split("'")[1]
IndexError: list index out of range
這是有道理的,我一定會合並,以消除逃逸和其他不需要的字符。我問的是,如果你有任何一個c.execute上面的變量是空的,我會得到這個錯誤,因爲查詢什麼都沒有返回。我想我可以找出這一個,我只是發現線上的SELECT EXISTS語句,這將節省我的時間,但感謝SQL注入信息。 –
嗯,看起來如果我的變量將來自窗體,上述方法仍然允許用戶從POST注入代碼。所以看來我仍然必須做一些轉義,對嗎?還是有更好的方法來防止從表單注入代碼? –
此方法應能自動正確地轉義所有內容。 – Lunaweaver