我试图找出如何搜索(或选择)列中的所有行,无论我是否知道列的长度。
我正在测试SQLite的工作原理以及尝试进行简单的包含检查(查看用户输入的信息是否已包含在数据库的特定列中)我注意到无论我输入什么内容row[]
命令我总是只返回第一行的条目(就好像我使用了row[0]
)
这是我的代码:
import sqlite3
conn = sqlike3.connect("testDb.DB")
c = conn.cursor()
def createUsr():
global usrName_
usrName_ = input('Enter your desired username: ')
usrName_Search = c.execute('SELECT usrName from usrInfo')
for row in usrName_Search:
if usrName_ in row[]:
print('Username taken')
createUsr()
else:
print('username created')
c.execute('INSERT INTO usrInfo VALUE ?', (usrName_,))
createUsr()
这是实际代码的缩短版本(另一个有更多的值,但这是错误的,所以我决定专注于此)
我不知道我需要输入row[]
来选择每个条目,或者是否还有其他方式我应该这样做。任何帮助将不胜感激
答案 0 :(得分:0)
您必须实际选择搜索结果并对其进行迭代。 conn.cursor.fetchall()将在[(usrName1,),(usrName2,)]等元组列表中返回结果。从逻辑上讲,您可以使用fetchone(),因为您只需要一个用户名。因此,我会做以下事情:
import sqlite3
conn = sqlike3.connect("testDb.DB")
c = conn.cursor()
def createUsr():
global usrName_
usrName_ = input('Enter your desired username: ')
sql = """SELECT usrName FROM usrInfo WHERE usrName = ?"""
usrName_Search = c.execute(sql, (usrName_,)).fetchone()
if not usrName_Search: #same as if usrName_Search ==None
print('username created')
sql = """INSERT INTO usrInfo (usrName) VALUES (?)"""
c.execute(sql, (usrName_,))
else:
print('Username taken')
createUsr()
createUsr()