SQLite3选择数据(在python中)

时间:2013-02-26 12:07:03

标签: python select sqlite

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

请帮帮我

1 个答案:

答案 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,))