如何使用psycopg2绑定双精度

时间:2010-05-10 21:16:44

标签: python psycopg2

我正在尝试使用psycopg2将float绑定到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 :(得分:0)

您遇到此问题的原因如下:

sql = '''insert into waypoints (name, elevation) values (%(name)s, %(ele)s)'''

因为在此处将float转换为字符串时,您无法获得所期望的所有数字。例如,

str(ele)

产生

'0.333333333333'

将行更改为

sql = '''insert into waypoints (name, elevation) values (%(name)s, %(ele).17f)'''

我相信会给你你想要的结果,因为

'%(ele).17f' % dic

产生

'0.33333333333333331'