1

我有一个像这样的元组,它基本上是一个数据库记录

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')

记录已经是一个元组。

其次,您试图将具有 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

使用以下,您需要添加逗号并删除 % 字符。

>>> 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')"
>>> 

对不起最后一个答案。这是更新的代码。

我强烈建议您使用内置的数据库驱动程序进行查询,但是如果您确实想使用元组构建字符串,我的新代码将产生所需的输出。

于 2012-10-11T12:58:42.117 回答
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 回答