1

我正在学习一些 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 的选择部分出错(检查打印)

请帮帮我

4

1 回答 1

2

在 SQL 中,单引号用于字符串,而表/列名称用双引号引起来。(SQLite 支持后者的单引号,以便在某些地方与 MySQL 兼容。)

您的查询将 stringUsername与 string123进行比较,并且此比较对于每条记录都失败。

用这个:

dat.execute('SELECT * FROM Users WHERE "Username" = \'123\'')

但是为了防止字符串格式化问题和 SQL 注入攻击,你应该使用参数:

username = "123"
dat.execute('SELECT * FROM Users WHERE "Username" = ?', (username,))
于 2013-02-26T12:18:18.410 回答