This question already has answers here:
ValueError usupported format character 'd' with psycopg2
                                
                                    (2个答案)
                                
                        
                                2年前关闭。
            
                    
insert_stat = """INSERT INTO measurement
             VALUES (%(Station)s, %(Date)s, %(Level)f,
                    %(MeanDischarge)f, %(Discharge)f, %(Temp)f, %(EC)f)"""


这是我的用于将数据插入表中的插入语句。
这是我的数据的样子和错误。

OrderedDict(
[('Station', '219018'),
('Date', datetime.date(2004, 12, 31)),
             ('Level', 0.219),
             ('MeanDischarge', 1.996),
             ('Discharge', 1.731),
             ('Temp', None),
             ('EC', None)]) .


数据库错误:

unsupported format character 'f' (0x66) at index 81 .


由于所有属性的类型都是正确的,因此我无法弄清为什么它继续显示此错误。

问题解决了。在我不知道psycopg会自动转换数据类型之前,所以即使数据类型是浮点型的,我也只需要使用'%s'而不是'%f%'。

最佳答案

在查询字符串中,即使传递数字,也始终必须使用%s占位符。所有Python对象均由Psycopg以其SQL表示形式进行转换,因此它们将作为字符串传递给查询。

insert_stat = """INSERT INTO measurement
         VALUES (%(Station)s, %(Date)s, %(Level)s,
                %(MeanDischarge)s, %(Discharge)s, %(Temp)s, %(EC)s)"""


http://initd.org/psycopg/docs/faq.html#faq-float

09-27 22:23