如何使用psycopg2绑定双精度类型
我正在尝试使用psycopg2将一个浮点数绑定到PostgreSQL的双精度类型。
ele = 1.0/3.0
dic = {'name': 'test', 'ele': ele}
sql = '''insert into waypoints (name, elevation) values (%(name)s, %(ele)s)'''
cur = db.cursor()
cur.execute(sql, dic)
db.commit()
sql = """select elevation from waypoints where name = 'test'"""
cur.execute(sql_out)
ele_out = cur.fetchone()[0]
ele_out
0.33333333333300003
ele
0.33333333333333331
显然,我并不需要那么高的精度,但我希望能够简单地比较这些值。我可以使用struct模块把它保存为字符串,但我觉得应该有更好的方法。谢谢!
1 个回答
0
你遇到这个问题的原因是因为这行代码:
sql = '''insert into waypoints (name, elevation) values (%(name)s, %(ele)s)'''
因为在这里,当浮点数被转换成字符串时,你并没有得到你期待的所有数字。例如,
str(ele)
会产生
'0.333333333333'
把这一行改成
sql = '''insert into waypoints (name, elevation) values (%(name)s, %(ele).17f)'''
我相信这样会给你想要的结果,因为
'%(ele).17f' % dic
会产生
'0.33333333333333331'