我正在学习使用python编程并使用SQlite3 我一直遇到同样的问题,我无法弄清楚出了什么问题。
我的表格设置
def user_table():
data = lite.connect(database)
dat = data.cursor()
with data:
dat.executescript("""CREATE TABLE IF NOT EXISTS Users(Id INTEGER PRIMARY KEY AUTOINCREMENT,
'Username' UNIQUE,
'Password',
'Email',
'UserCharacters_Id' INTEGER
)""");
现在我的代码选择一个用户名(用户名123存在,表格似乎正确(用SQLite工作室检查)
database = 'test.db'
data = lite.connect(database)
dat = data.cursor()
with data:
dat.execute("SELECT * FROM Users WHERE 'Username'='123'")
user = dat.fetchone()
print user
我尝试了很多不同的方法,但它一直没有返回。 python部分似乎正在工作,只是SQL的选择部分出错(用打印检查)
请帮帮我
答案 0 :(得分:2)
在SQL中,单引号用于字符串,而表/列名称用双引号引用。 (SQLite支持后者的单引号,以便在某些地方与MySQL兼容。)
您的查询将字符串Username
与字符串123
进行比较,并且此比较对每条记录都失败。
使用此:
dat.execute('SELECT * FROM Users WHERE "Username" = \'123\'')
但是为了防止字符串格式化问题和SQL注入攻击,您应该使用参数:
username = "123"
dat.execute('SELECT * FROM Users WHERE "Username" = ?', (username,))