私はSQLiteとPythonで練習しています。私は、データベースプロンプトをデータベースオブジェクトとして使用してTABLEを作成しようとしています。それは非常に素晴らしい作品Pythonでsqliteテーブルをモデル化するための変数のみを使用
new_table = raw_input('Enter a table name: ')
column = raw_input('Enter column name: ')
cur.execute(''' CREATE TABLE IF NOT EXISTS {tn} ({col})'''\
.format(tn = new_table, col = column))
と私はそれが直感的に見つける:いくつかの大規模な検索後、私はこの方法を見つけました(!公式ドキュメントはこの種については何も述べていない構文は、してください私を修正)。私の問題はINSERT INTO構文です。次のコードは、[OK]を動作しますが:
cur.execute("INSERT INTO {tn} ({col}) VALUES (?)", ('goodmorning')\
.format(tn=new_table, col=column))
以下このコード、機能しません。
insdata = raw_input('Insert data for column: ')
cur.execute("INSERT INTO {tn} ({col}) VALUES (?)", (insdata,)\
.format(tn=new_table, col=column))
とエラーで失敗:「タプル」オブジェクトには、属性の形式を持っていません。
質問です:SQLiteのVALUESに insdata値を代入するための適切な構文は何ですか?
神様、私はタプルを書式設定していました...好奇心のために、中括弧で変数を使用する代わりに他の方法がありますか?そうでない場合は、上記の構文/方法はどこに文書化されていますか? dbテーブルとカラムに変数名を割り当てるこのフォーマット方法をどうやって学ぶことができましたか?そしてもちろん、このような時機を得て一貫した返答をしてくれてありがとう! – ToucHDowN
@ToucHDowNデータベースに固有のものではなく、一般的な文字列書式構文です。ドキュメント[こちら](https://docs.python.org/2.7/library/string.html#format-string-syntax)信頼できないユーザー入力のデータベースで何かをすることは危険なことに注意してください。 – glibdud
@glibdud参考までにありがとうございます。私はいくつかの基本的なstrメソッド(.strip/splitなど)を研究しましたが、.formatに触れていないので、上記の中括弧で囲まれたSQLステートメントは私には見えませんでした。すべて今クリア...ありがとう。 – ToucHDowN