2016-04-05 15 views
0

私は列の長さを知っているかどうかにかかわらず、列内のすべての行を検索(または選択)する方法を調べようとしています。PythonでSQLite3の選択した列のすべての行を検索(または選択)する方法は?

SQLiteでの動作と、単純なインクルードチェック(ユーザーが入力したビット情報がデータベースの特定の列に既に含まれているかどうかを確認しています)をテストしています。 (私はrow[0]を使用したい場合のように)私はいつもここに戻っ

を最初の行からのみのエントリを持っrow[]コマンドへのコードの私のビットは次のとおりです。

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

これは、実際の短縮版ですコード(他の1つはより多くの値を持っていましたが、これはエラーが発生しているビットなので私は決めましたこれに集中する)

row[]に入力する必要があるかどうかわからず、すべてのエントリを選択するか、これを実行する別の方法がありますか。どんな助けも大いにありがとうございます

答えて

0

実際に検索結果を選択し、それらを反復処理する必要があります。 conn.cursor.fetchall()は結果を[(usrName1、)、(usrName2、)]のようなタプルのリストで返します。論理的には、fetchone()は1つのユーザー名を必要とするだけで使用できます。したがって、私は、次の操作を行います:「ファイル `で` /ホーム/ PI /デスクトップ/:

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() 
+0

おかげで、これは残念ながら、私は今、 '「型 'int型の引数には、反復可能ではありませんTypeError例外」を取得しています、よさそうですスクリプト/データベーステスト/ databaseEntry.py "、行20、createUsr 行の[0]:' –

+0

のusrName_が残念です。上記のようにusrName_Searchに変更してください –

+0

ああ、もっと意味があります。私は将来このメソッドを念頭に置いておきます:) –

関連する問題