0

私は次の(比較的単純な)問題に苦しんでいます。次のデータを返すMySQLdbでSELECTクエリを使用しています。

select * from extension_recording where filename = "20091030_135711-out.wav";
+----+--------------+------+-------------------------+----------+--------+--------------------+---------------------------+--------+-----------------+------+-------+
| id | extension_id | flow | filename                | filesize | unread | cr_date             | callerid                  | length | callid          | info | party |
+----+--------------+------+-------------------------+----------+--------+---------------------+---------------------------+--------+-----------------+------+-------+
|  1 |           41 | out  | 20091030_135711-out.wav |   264684 | 1      | 2009-10-30 13:57:31 | Some user <01273123456> |     20 | 1256911031.5482 |      | NULL  |
+----+--------------+------+-------------------------+----------+--------+---------------------+---------------------------+--------+-----------------+------+-------+

私はそれを次のように使おうとしています:

cur.execute ("SELECT * FROM extension_recording WHERE filename = %s;", (file))
csv_result = cur.fetchone()
csv_list.append ([csv_result])

これにより、Pythonデータ型のリストが作成されます。

print csv_list
(1L, 41L, 'out', '20091030_135711-out.wav', 264684L, '1', datetime.datetime(2009, 10, 30, 13, 57, 31), 'Some user <01273123456>', 20L, '1256911031.5482', '', None)

データをMySQLデータ型としてCSVに出力する必要があるため、各フィールドを適切に変換する必要があります。つまり、idフィールドとextension_idフィールドをlongではなくintに変換し、日付を文字列に変換します。このすべてのポイントは、私が次のようなCSVファイルになってしまうことです。

1,41,'out','20091030_135711-out.wav',264684,'1','2009-10-30 13:57:31','Some user <01273123456>',20,'1256911031.5482','',None

csv_resultを反復処理する必要があるかもしれませんが、データ型ごとに異なる方法で反復処理する方法を一生見ることはできません。

4

2 に答える 2

2

csvモジュールを使用して、事後に自動的に文字列に変換するかConnection、カスタムconv値でオブジェクトを初期化してデフォルトの型変換ディクショナリをオーバーライドし、MySQLから返される生の文字列としてすべてを提供することができます。コードの他のポイントで自動型変換が必要な場合は、すべての変換を手動で行うか、同じDBへの2番目の自動変換接続が必要になることを意味します。

于 2013-01-04T16:04:45.590 に答える
1

なぜそれらの値は独特なのですか?MySQLdbPythonタイプへの自動変換を行います(にintなるlong、にDATEなるdatetimeなど)。タプルが返されたcsvだけ:

import csv  
with open('file.csv', 'wb') as csvfile:
    csv_ = csv.writer(csvfile)
    csv_.writerow(csv_list)

これはあなたが必要とするすべてを行います。
(引用符が必要な場合は、quotechar="'", quoting = csv.CONSTANTHEREキーワードを追加してください)

ファイルの内容:

1,41,out,20091030_135711-out.wav,264684,1,2009-10-30 13:57:31,Some user <01273123456>,20,1256911031.5482,,

(注:Noneこれを使用した空の文字列です。)

于 2013-01-04T17:44:10.577 に答える