使用Python选择SQLite3数据
我正在自学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 Studio里检查过了)
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
我尝试了很多不同的方法,但结果总是返回None。Python的部分似乎没问题,只有SQL的选择部分出错了(我用打印语句检查过)
请帮帮我
1 个回答
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,))