使用Python选择SQLite3数据

1 投票
1 回答
970 浏览
提问于 2025-04-17 17:10

我正在自学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,))

撰写回答