如何使用Python搜索(或选择)SQLite3中所选列中的所有行?

时间:2016-04-05 14:32:03

标签: python python-3.x sqlite

我试图找出如何搜索(或选择)列中的所有行,无论我是否知道列的长度。

我正在测试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[]来选择每个条目,或者是否还有其他方式我应该这样做。任何帮助将不胜感激

1 个答案:

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