2010-05-10 54 views
1

我想使用psycopg2将浮点数绑定到postgresql双精度。如何使用psycopg2绑定双精度

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 

显然我不需要精度,但我希望能够简单地比较这些值。我可以使用结构模块并将其保存为字符串,但认为应该有更好的方法。由于

回答

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' 
+1

但是你正在做你自己的报价,这是坏的。 – fog 2011-07-22 09:31:37