我有一个这样的元组,基本上是一个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
我做错了什么?是否有更好的方法来实现我想要实现的目标?
答案 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))