Python psycopg2:TypeError:在字符串格式化过程中未转换所有参数
我查看了许多堆栈溢出帖子,大多数帖子都告诉我在插入Python psycopg2:TypeError:在字符串格式化过程中未转换所有参数,python,database,psycopg2,Python,Database,Psycopg2,我查看了许多堆栈溢出帖子,大多数帖子都告诉我在插入值(%s)时需要使用元组或列表。我尝试了列表和元组,但仍然得到了相同的错误:在字符串格式化过程中,并非所有参数都被转换。以下是用于将某些数据插入PostgreSQL数据库的函数代码: sql = ''' INSERT INTO immediate_info ( bytes_sent, bytes_recv, packets_sent, packets_recv, errin, errout,
值(%s)
时需要使用元组
或列表
。我尝试了列表和元组,但仍然得到了相同的错误:在字符串格式化过程中,并非所有参数都被转换。以下是用于将某些数据插入PostgreSQL数据库的函数代码:
sql = '''
INSERT INTO immediate_info (
bytes_sent,
bytes_recv,
packets_sent,
packets_recv,
errin,
errout,
dropin,
dropout)
VALUES (%s);
'''
conn = None
bytes_recv, bytes_sent, packets_sent, packets_recv, errin, errout, dropin, dropout = data
try:
conn = psycopg2.connect('all the connect stuff')
# create a new cursor
cur = conn.cursor()
# execute the INSERT statement
cur.execute(sql, (bytes_recv, bytes_sent, packets_sent, packets_recv, errin, errout, dropin, dropout,))
# commit the changes to the database
conn.commit()
# close communication with the database
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
如上所述,我也尝试过使用列表。这次我决定先解包数据
列表,尽管在我看来,使用索引(数据[0]、数据[1]等)简单地查看数据
列表将得到相同的结果
数据
包含一些用于测量计算机带宽的网络信息。它的所有内容都是int
格式
另外,如果您注意到,这里的字符串格式是旧的(指值(%s)
)。在这种情况下如何使用f
-格式?
如何消除此错误?使用游标执行插入语句时。执行
- 插入的列数必须与
VALUES
子句中的占位符数匹配
cursor.execute的第二个参数中的元素数必须与VALUES
子句中的占位符数匹配
所以
cursor.execute(““”插入到foo(bar,baz,qux)值(%s,%s)”,args)
错误,因为插入了三列,但只有两个值占位符
及
cursor.execute(““”插入到foo(bar,baz,qux)值(%s,%s,%s)”,
(‘a’、‘b’、‘c’、‘d’)
错误,因为第二个参数中的值数量与值
子句中的占位符数量不匹配。您正在值中传递持续时间
,但它没有列在插入
列中。所以应该是8个值,而你要传递9个。对不起,这是问题本身的错误,而不是代码。我只是忘了把它删掉。我希望现在的问题是正确的。问题仍然存在。然后问题将显示实际代码和错误。请注意,使用f字符串(或任何其他类型的字符串格式)向SQL查询中注入值不是一种安全的方法。我现在确实编辑了它。还有,那更好的办法是什么?或者评论不是询问此事的最佳场所?对不起,我昨天一定是睡着了!vlaues子句中的“%s”
的数量也必须与插入的列的数量相匹配,因此您的代码应该是。。。值(%s,%s,%s,%s,%s,%s,%s,%s,%s)
,假设插入八列。