Python中的C func中的浮点变量格式不正确
我不确定这是不是该问的地方。但我们使用一个名为umysql的python库。我们正在将python2升级到python3,因此已经迁移到umysql3。 umysql是一个C/C++mysql驱动程序 如果运行此代码:Python中的C func中的浮点变量格式不正确,python,mysql,c,Python,Mysql,C,我不确定这是不是该问的地方。但我们使用一个名为umysql的python库。我们正在将python2升级到python3,因此已经迁移到umysql3。 umysql是一个C/C++mysql驱动程序 如果运行此代码: import umysql3 import dsnparse conn = umysql3.Connection() conn.settimeout(1) conn.connect( #connection details ) conn.query(''' s
import umysql3
import dsnparse
conn = umysql3.Connection()
conn.settimeout(1)
conn.connect(
#connection details
)
conn.query('''
select %s, %s, %s;
''', (51.4827, -3.1808, 123))
您将得到以下错误:
回溯(最近一次调用last):文件“test umysql.py”,第15行,
在里面
“”’,(51.4827,-3.1808123))umysql.SQLError:(1064,“您的SQL语法有错误;请检查与您的
MySQL服务器版本,以便在附近使用正确的语法
“\0\0\01\0\0,-\0\0\03\0\0,第1行的123”
我不知道浮点变量发生了什么,而且我在python调用C func方面有点力不从心。我想知道是否有人能给我一个指针,或一个想法,看看这里可能发生了什么
干杯如果不了解库的具体内容,您似乎使用了错误的格式说明符:浮点数通常使用
%f
指定
如果保持失败,您可能需要考虑<强>不太安全的< /强>,但在将其设置为<代码> UMYSQL < /C> >之前,请自己更清楚地格式化查询。
query=“select{:f},{:f},{:f}”。格式(51.4827,-3.1808123)
#'选择51.482700,-3.180800123.000000'
编辑:
对单元测试的一个简短的观察并没有提供任何证据表明您的转义语法得到了支持。有些测试本身进行转义(请参阅)
范围(10)内的i的:
self.assertEquals((1,0),cnn.query(“插入到tbltest(测试id,测试字符串)值(%d,'test%d')”)”%(i,i)))
是的,我希望避免不太安全的方式。不确定在这种情况下是否可以使用%f。类似于mysqldb-python。我认为期望值是由%表示的每个vars@edit真奇怪!明确支持lol。否则,在过去5-7年中,我们的系统一直在欺骗Usher,这是一个测试,显示了我们如何使用它: