質問

私は現在、PythonリストのリストをMySQL DBにエクスポートする際に問題に直面しています。 IAMはMySQLDBを同じに使用し、executeManyコマンドを利用します。

たとえば、リストのリストがあります。

k1=[[['Bob', 'Alfred', 'Jen'],
['123 Elm Street', '55 Ninth Ave', '1 Paved Rd'],
[00123, 34565, 30094],
['Newark', 'Salinas', 'Los Angeles'],
['NJ', 'CA', 'CA']],[['Bob1', 'Alfred1', 'Jen1'],
['123 Elm Street1', '55 Ninth Ave1', '1 Paved Rd1'],
[001231, 345651, 300941],
['Newark1', 'Salinas1', 'Los Angeles1'],
['NJ1', 'CA1', 'CA1']]]

そして、私は試してみます(使用するカーソルとデータベースを初期化した後):

cursor.executemany('''INSERT INTO addresses
                 (name, street, zipcode, city, state)
                 VALUES
                 (%s, %s, %s, %s, %s)''',zip(k1))

そして、私はエラーがあります:

 _mysql_exceptions.ProgrammingError: not enough arguments for format string

まあ、基本的に、リストK1のリストからMySQL DBテーブルのリストから、対応するフィールドエントリを使用して「アドレス」という名前、Street、Zipcode、City、Stateが欲しいです。

誰かが私を正しい方向に向けることができれば、素晴らしいでしょう。

役に立ちましたか?

解決

あなたのデータストラクチャは本当に厄介です。私はあなたがK1をこれに変換したいと思っています:

>>> sum([zip(*x) for x in k1], [])
<<< 
[('Bob', '123 Elm Street', 83, 'Newark', 'NJ'),
 ('Alfred', '55 Ninth Ave', 34565, 'Salinas', 'CA'),
 ('Jen', '1 Paved Rd', 30094, 'Los Angeles', 'CA'),
 ('Bob1', '123 Elm Street1', 665, 'Newark1', 'NJ1'),
 ('Alfred1', '55 Ninth Ave1', 345651, 'Salinas1', 'CA1'),
 ('Jen1', '1 Paved Rd1', 300941, 'Los Angeles1', 'CA1')]

今、あなたはexecutemanyを行うことができます:

sql = "INSERT INTO addresses (name, street, zipcode, city, state) VALUES (%s, %s, %s, %s, %s)"
data = sum([zip(*x) for x in k1], [])
cursor.executemany(sql, data)

他のヒント

これは本当にSQLの質問だとは思いません。 executemany()を呼び出す前に、データを正しい形式で取得することに集中しましょう。

K1の例は2つのリストのリストであり、それぞれ内側リストがリストのリストであり、名前/アドレスコンポーネントです。したがって、実際にリストのリストのリストがあります。リストの外側の層のポイントはわかりませんが、内側の層はzipに適しているようです。

その外層を無視して、私はあなたが望むのは

zip(*k1[0])

これにより、K1の最初の要素の正気な結果が得られます。繰り返しますが、K1 [0]とK1 [1]で同じデータを繰り返す意図が何であるかはわかりませんので、K1のさらなる要素で何をするかを推測しようとはしません。

繰り返しますが、これをSQLデータベースと統合する方法を心配する前に、Pythonインタープリターでプレイしてみてください。

>>> k1=[[['Bob', 'Alfred', 'Jen'],['123 Elm Street', '55 Ninth Ave', '1 Paved Rd'],[00123, 34565, 30094],['Newark', 'Salinas', 'Los Angeles'],['NJ', 'CA', 'CA']],[['Bob1', 'Alfred1', 'Jen1'],['123 Elm Street1', '55 Ninth Ave1', '1 Paved Rd1'],[001231, 345651, 300941],['Newark1', 'Salinas1', 'Los Angeles1'],['NJ1', 'CA1', 'CA1']]]
>>> zip(k1)
[([['Bob', 'Alfred', 'Jen'], ['123 Elm Street', '55 Ninth Ave', '1 Paved Rd'], [83, 34565, 30094], ['Newark', 'Salinas', 'Los Angeles'], ['NJ', 'CA', 'CA']],), ([['Bob1', 'Alfred1', 'Jen1'], ['123 Elm Street1', '55 Ninth Ave1', '1 Paved Rd1'], [665, 345651, 300941], ['Newark1', 'Salinas1', 'Los Angeles1'], ['NJ1', 'CA1', 'CA1']],)]
>>> k1[0]
[['Bob', 'Alfred', 'Jen'], ['123 Elm Street', '55 Ninth Ave', '1 Paved Rd'], [83, 34565, 30094], ['Newark', 'Salinas', 'Los Angeles'], ['NJ', 'CA', 'CA']]
>>> k = k1[0]
>>> zip(k)
[(['Bob', 'Alfred', 'Jen'],), (['123 Elm Street', '55 Ninth Ave', '1 Paved Rd'],), ([83, 34565, 30094],), (['Newark', 'Salinas', 'Los Angeles'],), (['NJ', 'CA', 'CA'],)]
>>> zip(k[0], k[1])
[('Bob', '123 Elm Street'), ('Alfred', '55 Ninth Ave'), ('Jen', '1 Paved Rd')]
>>> zip(k[0], k[1], k[2], k[3], k[4])
[('Bob', '123 Elm Street', 83, 'Newark', 'NJ'), ('Alfred', '55 Ninth Ave', 34565, 'Salinas', 'CA'), ('Jen', '1 Paved Rd', 30094, 'Los Angeles', 'CA')]
>>> zip(*k)
[('Bob', '123 Elm Street', 83, 'Newark', 'NJ'), ('Alfred', '55 Ninth Ave', 34565, 'Salinas', 'CA'), ('Jen', '1 Paved Rd', 30094, 'Los Angeles', 'CA')]

このように、各リスト(それぞれにいくつかのリストが含まれている)をzipに渡すことを意味すると思います。

>>> [zip(*x) for x in k1]
[[('Bob', '123 Elm Street', 83, 'Newark', 'NJ'), ('Alfred', '55 Ninth Ave', 34565, 'Salinas', 'CA'), ('Jen', '1 Paved Rd', 30094, 'Los Angeles', 'CA')], [('Bob1', '123 Elm Street1', 665, 'Newark1
', 'NJ1'), ('Alfred1', '55 Ninth Ave1', 345651, 'Salinas1', 'CA1'), ('Jen1', '1 Paved Rd1', 300941,   'Los Angeles1', 'CA1')]]
>>> 

また、主要なゼロを保持するために、zipコードは数字ではなく文字列である必要があり、意図していないものとして誤って比較されないようにすることに注意してください(そこにある「83」郵便番号を参照してください。 。

データ構造を次のようにしている場合:(フォーマットではなく組織。SQLに挿入するために列ではなく行を表す必要があります。)

[        
    ['Bob',     '123 Elm Street',  00123, 'Newark',     'NJ'],        
    ['Alfred',   '55 Ninth Ave',    34565, 'Salinas',   'CA'],
    ['Jen',     '1 Paved Rd',      30094, 'Los Angeles','CA']
]

SQLインサートには機能する可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top