Python SQL - 在索引81处继续说'不支持的格式字符'f'(0x66),即使所有属性的类型都是正确的[重复]

问题描述 投票:0回答: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)]) .   

db错误:

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

我无法弄清楚为什么它会一直显示此错误,因为所有属性的类型都是正确的。

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

python sql database psycopg2
2个回答
1
投票

在查询字符串中,即使传递数字,也始终必须使用%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


0
投票

我相信你的问题与你使用%s有关。尝试使用以下代码:

insert_stat = “INSERT INTO measurement(Station, Date, Level, MeanDischarge, Discharge) 
    VALUES (?, ?, ?, ?, ?)”, (value1, value2, value3, value4, value5)

我知道这在使用sql直接插入数据库时​​有效,但我不知道创建字符串。

© www.soinside.com 2019 - 2024. All rights reserved.