python - SQLITE3 FROM 表选择列 WHERE 布尔语句
问题描述
我尝试了 3 种不同的 sqlite3 语句变体来选择数据:
cursor.execute('SELECT * FROM users WHERE username = ?', (username,))
cursor.execute('''SELECT * FROM users WHERE username = ?;''', (username,))
cursor.execute('SELECT * FROM users WHERE username = "monkey1" ')
这些陈述的参考文献来自1 2。然而,他们都没有工作。我怀疑我正在做一些非常愚蠢的事情,但似乎无法弄清楚这一点。
我希望能够打印出用户名“monkey”的数据。感谢任何帮助指出我的愚蠢错误。
import sqlite3
import datetime
def get_user(connection, rows='all', username=None ):
"""Function to obtain data."""
#create cursor object from sqlite connection object
cursor = connection.cursor()
if rows == 'all':
print("\nrows == 'all'")
cursor.execute("SELECT * FROM users")
data = cursor.fetchall()
for row in data:
print(row)
if rows == 'one':
print("\nrows == 'one'")
cursor.execute('SELECT * FROM users WHERE username = ?', (username,))
#cursor.execute('''SELECT * FROM users WHERE username = ?;''', (username,))
#cursor.execute('SELECT * FROM users WHERE username = "monkey1" ')
data = cursor.fetchone()
print('data = ',data)
cursor.close()
return data
def main():
database = ":memory:"
table = """ CREATE TABLE IF NOT EXISTS users (
created_on TEXT NOT NULL UNIQUE,
username TEXT NOT NULL UNIQUE,
email TEXT NOT NULL UNIQUE
); """
created_on = datetime.datetime.now()
username = 'monkey'
email = 'monkey@gmail'
created_on1 = datetime.datetime.now()
username1 = 'monkey1'
email1 = 'monkey1@gmail'
# create a database connection & cursor
conn = sqlite3.connect(database)
cursor = conn.cursor()
# Insert data
if conn is not None:
# create user table
cursor.execute(table)
cursor.execute('INSERT INTO users VALUES(?,?,?)',(
created_on, email, username))
cursor.execute('INSERT INTO users VALUES(?,?,?)',(
created_on1, email1, username1))
conn.commit()
cursor.close()
else:
print("Error! cannot create the database connection.")
# Select data
alldata = get_user(conn, rows='all')
userdata = get_user(conn, rows='one', username=username )
print('\nalldata = ', alldata)
print('\nuserdata = ', userdata)
conn.close()
main()
解决方案
您的表定义具有按顺序排列的字段,created_on, username, email
但您将数据插入为created_on, email, username
. 因此第一行的用户名是'monkey@gmail'
。
避免这种错误的一个好方法是在 INSERT 语句中指定列,而不是依赖于正确获取原始表定义的顺序:
INSERT INTO users (created_on, email, username) VALUES (?,?,?)
推荐阅读
- javascript - Javascript - 深度过滤数组
- java - 如何避免使用 jsp 从数据库中打印重复名称?
- apache-spark - 如何识别正在运行的 JVM 是 Apache Spark 中的 Driver 还是 Executor
- python - 使用python解析文本文件并设计报告
- asp.net - SmartStore 应用程序上我的服务器上的编译错误
- c# - 将子实体添加到数据库并将它们分配给数据库 Entity Framework Core 中的父对象
- swift - swift playground 显示 uiview 并不停循环
- app-inventor - 摇动手机时图像没有变化
- javascript - ReactJs:如何在单击按钮时添加/附加组件
- python - python cx_Freeze askopenfile