2015-11-10 11 views
5

私はPythonとSQLデータベースを使用して私の最初のステップを作っていますが、使用するパッケージと方法はまだ分かりません。私はおよそ20のキーでそれぞれ約300kの辞書を持ったリストを持っています。これらの辞書は、SQLテーブルに挿入されます。Pythonを使用してSQLのテーブルに辞書のリストを挿入します

私の意見では、辞書のアプローチの利点は、私が明示的に特定の値を入力したい列に名前を付けるということです。 (これは良いアプローチではないかもしれません)

私の問題の本質を捉えるより具体的な例を紹介しましょう。 テーブルはID(整数)、価格(小数点)、型(文字列)の3つの列で構成されます。 TypeはNULL値をサポートします。

私の辞書のキーは、同じ名前を持つとdictsのリストは次のようになります。

lst = [{'ID':1, 'Price': '9.95', 'Type': None}, 
     {'ID':2, 'Price': '7.95', 'Type': 'Sports'}, 
     {'ID':3, 'Price': '4.95', 'Type': 'Tools'}, ...] 

次されているが発生するので、質問:

  1. はdictsを使用してのアプローチです権利? (私は20列あることに注意してください)
  2. はい/いいえ:このようなクエリを効率的に実行するにはどうすればよいですか?
  3. 価格を10進数に変換してSQL文の前に変換する必要がありますか?これは「オンザフライ」で実現可能ですか
  4. None値は自動的にNULLに変換されるか、追加作業が必要ですか?
+0

あなたが取り組んでいるプロジェクトのどのような? Pythonとデータベースを使用している場合は、DjangoのようなMVCを実装すると便利です。 https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller https://www.djangoproject.com/ –

+0

ウェブスクラップサービス(いくつかのjsonファイル)からデータを取得しています。私がMSSQL-Serverに挿入する情報を抽出する必要があります。 – Quickbeam2k1

+0

これは一回限りだと仮定しているので、フレームワーク全体を実装することは有用ではありません。どのSQLのフレーバーを使用していますか?多くのDBは、さまざまな形式の一括挿入をサポートしています(つまり、ファイルにウェブスクラップされたデータを書き込む方が便利です)。例えば。 https://msdn.microsoft.com/en-CA/library/ms188609.aspx(間違ったリンクを編集) –

答えて

3

Python Database API specification準拠のデータベースドライバを使用しているとします。

タイプ変換(質問3と4)は、データベース・ドライバーがすぐに処理する必要があります。

2については

)、executemany()があります:

cursor.executemany(""" 
    INSERT INTO 
     mytable 
     (id, price, type) 
    VALUES 
     (%(id)s, %(price)s, %(type)s) 
""", lst) 
+0

あなたのソリューションでは、辞書のリストではなく、タプルのリストを使用します。したがって、すべてのタプルで順序を維持する必要があります。 – Quickbeam2k1

+1

@ Quickbeam2k1 nono、私は 'lst'を基本的にそのまま残しています - 辞書のリスト - クエリ内のプレースホルダが辞書のキーに対応していることを見ればいいだけです。 – alecxe

+0

ええと、辞書はここでは問題ではないですか? (つまり%(id)はdictなどのIDキーを参照していますか?このステートメントも準備済みのステートメントですか?私が考えていた限り、その場合は?をプレースホルダとして指定する必要があります。クエリーの音量のために、準備されたステートメントが間違いなく好まれます – Quickbeam2k1

関連する問題