2017-01-24 3 views
3
db.execute('CREATE TABLE IF NOT EXISTS test (name TEXT)') 
print("Table created successfully") 
db.execute('INSERT INTO %s VALUES (%s)' % ('test', 'sample')) 
db.close() 

私はPythonを使用しています。テーブルは「名前」の列で正常に作成されますが、何も挿入できません。SQLフラスコからクエリを挿入できません

私はエラーを取得する:

sqlite3.OperationalError: no such column: sample 

なぜ?あなたは、列名を忘れてしまった

db.execute('INSERT INTO %s (name) VALUES (\'%s\')' % ('test', 'sample')) 
+0

コメントとして、SQLAlchemyを調べることをお勧めします。これはあなたの人生を楽にします。 – mmenschig

+0

@ mmenschig、私はそれを見ましたが、私はSQL言語も学ぶかもしれないことに気付きました。雇用に有益ではないですか? – garoo

+0

私はSQLが知っていることに有益であることに同意しますが、SQLの基礎を理解したら、SQLAlchemyに移行することをお勧めします。私はいくつかのSQLコースをオンラインで完了し、今後のPythonプロジェクトにSQLAlchemyを使用することをお勧めします。 – mmenschig

答えて

2

私はあなたのようなものが必要だと思いますか?

db.execute('CREATE TABLE IF NOT EXISTS test (name TEXT)') 
print("Table created successfully") 
db.execute('INSERT INTO %s (name) VALUES (%s)' % ('test', 'sample')) 
db.close() 
+1

あなたのVALUESの代りに引用符がありません。つまり、ハードコードされたクエリ文字列を実際には実行していません。 '( 'sample')'はあなたが望むものですが、 '(sample)'が得られます。 –

+0

@JLPyretありがとうございます。一定。 –

1

のpythonに翻訳
INSERT INTO test (name) 
VALUES 
    ('sample'); 

+0

エラー、そのような列は、 "サンプル"? – garoo

+0

@garooあなたは自分のコードを実行しましたか? – dadde

-1

これは動作するはずです:

db.execute('INSERT INTO test VALUES (%s)' % ('sample')) 
0

は、あなたの変更をコミットする必要があります。 db.commit()に電話しないと、データベースのクローズ時に変更内容(表の作成を含む)がロールバックされます。

-1

間違いなく、文字列の置換を使用しないでください。それはにあなたを開きます。代わりに、実際のエラー(つまり、データではなくカラム名としてsampleを扱っている)を偶発的に修正するデータベースバインディングを使用してください。

[OK]を、同様にそれを書くかもしれません:

import sqlite3 
db = sqlite3.connect(':memory') 

#you control this stuff, as the db schema isn't typically coming from user data 
#so less likely to be a mess... 
#i.e. build your query templates with string substitutions, but exec with binds. 
tablename = 'test' 
db.execute('CREATE TABLE IF NOT EXISTS %s (name TEXT)' % (tablename)) 
print("Table created successfully") 
qry = 'INSERT INTO %s VALUES (?)' % (tablename) 

#the data is where you want to be careful 
db.execute(qry, ('sample',)) 
print ("insert done") 
db.close() 

与える:

Table created successfully 
insert done 

#で開始しhttps://docs.python.org/2/library/sqlite3.html @ドキュメントをチェックアウト、これを行うことはありません - 安全ではありません!

関連する問題