在Python中将元组转换为字符串时出错

时间:2012-10-11 12:55:12

标签: python string tuples

我有一个这样的元组,基本上是一个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 个答案:

答案 0 :(得分:5)

不要像这样构建SQL。使用适当形式的数据库引擎。

SQLite中,它的工作原理如下:

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

有关详细信息,请参阅Python Database API Specification v2.0

答案 1 :(得分: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])

答案 2 :(得分:0)

使用以下内容,您需要添加逗号并删除%charecter。

>>> 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驱动程序进行查询,但是如果你想使用元组构建一个字符串,我的新代码将生成所需的输出。

答案 3 :(得分:0)

你想要更多%s

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