1

基本的にDBレコードであるこのようなタプルがあります

record = ('R70:Congestion Ratio', 'pm_201204151900_KPI1.csv', 'pmexport_04_15_2012_20_00.tar.gz')

それをタプルに変換してから文字列に変換してクエリを取得しようとしています

"INSERT INTO PM_NEW_COUNTERS (COUNTER_NAME, CSV_FILE_NAME, TAR_FILE_NAME) VALUES %s" %(tuple(record))

しかし、私はTypeError: not all arguments converted during string formatting何を間違っていますか? 私が達成しようとしていることを達成するためのより良い方法はありますか?

4

4 に答える 4

5

このようにSQLを構築しないでください。データベースエンジンの適切な形式を使用してください。

SQLiteでは、次のように機能します。

cur.execute("""INSERT INTO PM_NEW_COUNTERS
  (COUNTER_NAME, CSV_FILE_NAME, TAR_FILE_NAME)
  VALUES (?, ?, ?)""", (a, b, c))

詳細については、PythonデータベースAPI仕様v2.0を参照してください。

于 2012-10-11T13:00:16.990 に答える
1

まず第一に、このようなクエリを作成しようとする必要があります。前に述べたように。

次に、文字列の書式設定に関する質問に答えます。

record = ('R70:Congestion Ratio', 'pm_201204151900_KPI1.csv', 'pmexport_04_15_2012_20_00.tar.gz')

record はすでにタプルです。

次に、3 つの値を持つタプルを文字列内の 1 つの場所にのみ配置しようとしています。

代わりに次のようにします。

"INSERT INTO PM_NEW_COUNTERS (COUNTER_NAME, CSV_FILE_NAME, TAR_FILE_NAME) VALUES %s" % " ".join(record))

または、より詳細な制御が必要な場合:

"INSERT INTO PM_NEW_COUNTERS (COUNTER_NAME, CSV_FILE_NAME, TAR_FILE_NAME) VALUES %s %s %s" % (record[0], record[1], record[2])
于 2012-10-11T13:04:32.790 に答える
0

あなたは%sそこにもっと欲しい:

"INSERT INTO PM_NEW_COUNTERS (COUNTER_NAME, CSV_FILE_NAME, TAR_FILE_NAME) VALUES ('%s', '%s', '%s')" %(tuple(record))
于 2012-10-11T13:02:03.360 に答える
0

以下を使用します。カンマを追加し、% 文字を削除する必要があります。

>>> str = "INSERT INTO PM_NEW_COUNTERS (COUNTER_NAME, CSV_FILE_NAME, TAR_FILE_NAME) VALUES ('%s')" %"', '".join(record)
>>> str
"INSERT INTO PM_NEW_COUNTERS (COUNTER_NAME, CSV_FILE_NAME, TAR_FILE_NAME) VALUES ('R70:Congestion Ratio', 'pm_201204151900_KPI1.csv', 'pmexport_04 _15_2012_20_00.tar.gz')"
>>> 

最後の回答で申し訳ありません。これが更新されたコードです。

クエリに組み込みの db ドライバーを使用することを強くお勧めしますが、タプルを使用して文字列を作成する場合は、新しいコードで目的の出力が生成されます。

于 2012-10-11T12:58:42.117 に答える