Python-从请求中获取十进制值并在MySQL中插入
我有一个带博物馆桌子的MySQL数据库:Python-从请求中获取十进制值并在MySQL中插入,python,mysql,flask,floating-point,Python,Mysql,Flask,Floating Point,我有一个带博物馆桌子的MySQL数据库: +-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | idMuseums |
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| idMuseums | int(11) | NO | PRI | NULL | auto_increment |
| nameMuseums | varchar(45) | YES | | NULL | |
| City | varchar(60) | NO | | NULL | |
| Lat | decimal(9,6) | NO | | NULL | |
| Lon | decimal(9,6) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
对于Android客户端,我使用以下参数通过StringRequest向Python服务器发送gps坐标:
//some code
params.put("lat", String.format("%.6f",lat));
params.put("lon", String.format("%.6f",lon));
Log.d(IDENTIFIER,"lat lon in request: "+String.format("%.6f",lat)+" "+String.format("%.6f",lon));
^----in log the coordinates are correct and they have a comma, e.g. 45,451691 9,161442
因此,在服务器(使用Flask)中,我想添加新的博物馆,我尝试了以下方法:
try:
m = Museum(id=0, name=request.form['name'], city=request.form['city'], lat=request.form['lat'], lon=request.form['lon'])
db.session.add(m)
db.session.commit()
return '', 200
except Exception as e:
db.session.rollback()
return e
问题是:
lat=request.form['lat'],lon=request.form['lon']
就像在这个例子中,我没有得到数据库中逗号后面的数字(例如45.000000 9.000000)lat=float(request.form['lat']),lon=float(request.form['lon'])
我得到TypeError:“exceptions.ValueError”对象不可调用
lat=Decimal(request.form['lat']),lon=Decimal(request.form['lon'])
我得到类型错误:“InvalidOperation”对象不可调用
我缺少什么?MySQL使用点字符(句点)作为数字文本中的小数分隔符,而不是逗号字符 要插入十进制值,SQL语句如下所示
( ..., lat, lon, ...) VALUES ( ... , '45.451691' , '9.161442' , ...)
-- ^ ^
字符串中有逗号字符,MySQL将删除逗号以及逗号后面的所有内容 为了演示正在发生的事情,请考虑:
SELECT '123.456789' + 0
, '123,456789' + 0
, '123derpity' + 0
参考资料: 数字可能包括。作为十进制分隔符
你能分享
request.form
数据吗?@yogkm对不起,我不明白你问我什么。在Python中,当我访问一个URL时,我会调用这个函数;在Android中,我输入了四个参数:我从两个EditText中获取name和city,然后在使用地理代码从address计算后格式化lat lon。首先lat lon是两个双
变量,例如,45.4516914 9.161441700000001,但在格式之后是45451691 9161442。你说得对!如果我想要点而不是逗号,我可以使用String.format(Locale.US,“%.6f”,lat)
,它可以工作!谢谢