1

私はPythonでプログラミングを学び、SQlite3を利用していますが、同じ問題に遭遇し続けており、何が問題なのかわかりません。

私のテーブルセッティング

def user_table():
    data = lite.connect(database)
    dat = data.cursor()

    with data:
        dat.executescript("""CREATE TABLE IF NOT EXISTS Users(Id INTEGER PRIMARY KEY AUTOINCREMENT,
        'Username' UNIQUE,
        'Password',
        'Email',
        'UserCharacters_Id' INTEGER
        )""");

ユーザー名を選択する私のコード(ユーザー名123が存在し、テーブルが正しいようです(SQLiteスタジオでチェック)

database = 'test.db'
data = lite.connect(database)
dat = data.cursor()
with data:
    dat.execute("SELECT * FROM Users WHERE 'Username'='123'")
    user = dat.fetchone()   
    print user

さまざまな方法を試しましたが、None が返され続けます。python部分は機能しているようですが、SQLの選択部分だけがうまくいきません(プリントで確認)

私を助けてください

4

1 に答える 1

2

SQL では、文字列には一重引用符が使用されますが、テーブル/列の名前は二重引用符で囲まれます。(SQLite は、いくつかの場所で MySQL との互換性のために、後者の単一引用符をサポートしています。)

クエリは stringUsernameと string を123比較しますが、この比較はすべてのレコードで失敗します。

これを使って:

dat.execute('SELECT * FROM Users WHERE "Username" = \'123\'')

ただし、文字列の書式設定の問題や SQL インジェクション攻撃を防ぐには、パラメーターを使用する必要があります。

username = "123"
dat.execute('SELECT * FROM Users WHERE "Username" = ?', (username,))
于 2013-02-26T12:18:18.410 に答える