2016-11-16 4 views
0

このようにフォーマットされた文字列として 'Date Time'を指定しようとしています。 "2016-11-16 12:17:07.957850"。 SQL Liteは、別々に各文字を渡しているかのように扱います。SQL Lite 3文字列を別々の文字として使用するか?

sqlite3.ProgrammingError:指定されたバインディングの数が正しくありません。現在のステートメントは1を使用し、26が提供されます。

どうすれば修正できますか?

cursor = db.cursor() 
    sql = """update Pet set [PastLogin] = @LastChecka where [PetId] = """ + str(PetID) 

    cursor.execute("PRAGMA foreign_keys = ON") 
    cursor.execute(sql,LastChecka) 
    db.commit() 
+0

'{TS「YYYYの形式を試してみてください-mm-dd HH:mm:ss '} '。または、sqlilteがサポートしている場合は、クエリパラメータを使用します。 –

答えて

-1

クエリにはプレースホルダはまったく入れていません。 @varnameはプレースホルダではなく、宣言された変数を参照します。

また、PetIDもパラメータである必要があります。

また、中括弧で囲まれたフィールド名は標準SQLではありません。

sql = """update Pet set PastLogin = ? where PetId = ?""" 
cursor.execute(sql,(LastChecka, PetId)) 
0

​​関数はパラメータのリストを必要とし、文字列は文字のリストです。

あなたはタプルや配列にパラメータを置く必要があります。(LastChecka,)または[LastChecka]

しかし、両方の値のパラメータを使用するように良いアイデアのようになります。

sql = "UPDATE Pet SET [PastLogin] = @LastChecka WHERE [PetId] = @PetID" 
cursor.execute(sql, (LastChecka, PetID)) 
関連する問題