0

私はSQLにあまり詳しくありません。100 列を超えるテーブルがあります。ディクショナリからテーブルの対応する列にデータを挿入する最良の方法は何ですか (キーと列の名前は同じです)?

例:

私のSQLテーブル

列1 列2 列3 列4 列5

辞書から取得した私のデータ:

最初のデータセット

Column2:りんご、Column4:木

2 番目のデータセット

Column1:バナナ、Column2:青、Column3:緑、Column4:家、Column5:赤

したがって、辞書のキーがテーブルの列名と同じである場合、データを挿入する必要があります。単一のクエリに対してこれを行う方法は知っていますが、多数のクエリに対してこれを (巧妙に) 行うにはどうすればよいですか?

ありがとう!

編集:

私が単一レベルで行うことといくつかの説明:

1) 120 列すべてを含むがデータを含まない SQL テーブルを作成します。2)データベースに入れる必要があるデータの一部を含む約500語のファイルがあります(120列から約5〜10)。3)したがって、それらを読み取って解析する必要があり、辞書内のデータのキーが120個の列名のいずれかと一致する場合、値を挿入する必要があります。3) シングルモード:

if key == 'Column1':

SQL = INSERT INTO Column1 valuexy

もちろん、これは 500 個のファイルと 120 個の列に対して非常にばかげています。これがより明確であることを願っています。

4

2 に答える 2

4

次のdictがあるとしましょう:

query_data = {
    'col1': 56,
    'col2': 100,
    'col3': 'lol'
}

SQL クエリは次のように作成できます。

sql = 'INSERT INTO table_name ({fields}) VALUES ({values})'

次に、フィールド文字列を構築する必要があります

fields = query_data.keys()
fields_string = ', '.join(fields)

値については、すでに作成されているフィールド リストを使用して、同様のことを行います。(辞書が OrderedDict の場合、これは別の方法で行うことができます)。

values_string = ', '.join(['"{0}"'.format(query_data[key]) for key in fields])

最後に、文字列を構成できます。

composed_sql = sql.format(fields=fields_string, values=values_string)

これは非常に大まかな方法​​ですが、このトピックに慣れていない場合は非常に理解できます。ほとんどのフレームワークでは、これを実現するために非常に洗練された方法が使用できます。特にSQLインジェクションに関して。

印刷して、遊んで、概念を理解すると、おそらく他の方法を使用するようになるでしょう。

編集

より簡潔な方法は次のとおりです。

sql = 'INSERT INTO table_name ({fields}) VALUES ({values})'
fields = ', '.join(query_data.keys())
values = ', '.join(['"{0}"'.format(value) for value in query_data.values()])
composed_sql = sql.format(fields=fields, values=values)
于 2013-03-28T15:14:46.300 に答える
2

join()キーとディクショナリの値をandで連結できますmap()

d = {'Column1':'banana', 'Column2':'blue', 'Column3':'green', 'Column4':'house', 'Column5':'red'}
columns = ', '.join(map(str, d.keys()))
values = ', '.join(map(repr, d.values()))
cursor.execute("INSER INTO table ({}) VALUES ({})".format(columns, values))
于 2013-03-28T15:21:19.710 に答える