【问题标题】:How to search (or select) all rows in selected column in SQLite3 with Python?如何使用 Python 在 SQLite3 中搜索(或选择)选定列中的所有行?
【发布时间】:2016-04-06 12:21:46
【问题描述】:

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

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

【问题讨论】:

    标签: python python-3.x sqlite


    【解决方案1】:

    您必须实际选择搜索结果并对其进行迭代。 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()
    

    【讨论】:

    • 谢谢这看起来不错,不幸的是我现在在File "/home/pi/Desktop/Scripts/Database Test/databaseEntry.py", line 20, in createUsr if usrName_ in row[0]:得到"TypeError: argument of type 'int' is not iterable"
    • 抱歉改成上面的 usrName_Search
    • 啊是的,这更有意义,非常感谢它现在完美运行!我以后会记住这种方法的:)
    • 对此感到抱歉,但由于某种原因,我无法理解它再次停止工作,我现在得到 usrName_Search = c.execute(sql, (usrName_,)).fetchone()[0] TypeError: 'NoneType' object is not subscriptable ,即使我将代码取出并单独运行它也是如此与上面的代码完全相同(除了第 2 行的错字, sqlike3 应该是 sqlite3),我现在仍然得到这个错误。我一遍又一遍地检查,据我所知,它与之前的工作方式相同。 (和你的帖子一样)
    • 我可以从link 看到这很可能是由于fetchone() 返回None,但是查看了数据库,那里有要获取的数据,所以我不知道为什么这正在发生。
    猜你喜欢
    • 1970-01-01
    • 2012-12-31
    • 2013-10-27
    • 2021-09-29
    • 1970-01-01
    • 2018-10-09
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多