【问题标题】:Sqlite query - SELECT FROM returning 0 resultsSqlite 查询 - SELECT FROM 返回 0 个结果
【发布时间】:2020-11-23 21:37:30
【问题描述】:

刚开始使用 SQLite。我正在尝试查找我的用户表中是否存在名称。我正在使用以下代码:

cursor.execute("SELECT * FROM users WHERE users.username = ?", (name,))

其中 name 是传递给包含此代码的函数的参数(字符串)。从我在文档中看到的内容来看,这就是我应该如何选择使用参数而不是单个值。

但是使用:

 print(len(cursor.fetchall()))

返回长度 0。用户表存在并填充了用户,包括我要选择的用户。我已经在查询控制台中验证了这一点。

如果我做错了什么,我们将不胜感激。我认为这是我的查询的问题

【问题讨论】:

  • 将其分解为基础知识。首先尝试cursor.execute("SELECT * FROM users"),看看你会得到什么结果。
  • 另外,当查询已经指定了表时,为什么还要使用users.username?我本来希望只看到username。 (我不知道这是个问题,但对我来说似乎很不寻常。)
  • 那是我的错,它最初是用户名,只是我试图让它使用的东西。这是个好建议,谢谢,我应该想到这一点。
  • @JohnGordon 虽然在这个简单的查询中不需要,但在字段名前加上表名既不稀奇也不会导致问题

标签: python sql sqlite


【解决方案1】:

你的陈述不是问题,例如:

import sqlite3

conn = sqlite3.connect('test.db')
cursor = conn.cursor()

cursor.execute('DROP TABLE users')

cursor.execute('CREATE TABLE users (username TEXT, age INT)')
cursor.execute('INSERT INTO users VALUES ("john", 40)')
cursor.execute('INSERT INTO users VALUES ("mary", 52)')

cursor.execute("SELECT * FROM users WHERE users.username = ?", ('john',))
print(cursor.fetchall())

你可以运行它,它会打印出来:

[('john', 40)]

因此,问题出在您未共享代码的 name 的值上,或者与数据库本身有关,它实际上并不包含您要选择的记录,但是您没有共享您正在测试的示例数据。 (或者可能,您认为您正在连接到要连接的数据库,但实际上您只是连接到另一个/运行.connect() 时创建的新数据库)

【讨论】:

  • 谢谢。你是对的,这不是查询的问题。还在调查!但我认为启动服务器时处理数据库的方式存在问题
猜你喜欢
  • 2015-11-01
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 2015-05-15
  • 2014-02-20
相关资源
最近更新 更多