我有一个带有博物馆表的MySQL数据库:
+-------------+--------------+------+-----+---------+----------------+
| 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使用以下参数将gps坐标发送到Python服务器:
//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' object is not callable
lat=Decimal(request.form['lat']), lon=Decimal(request.form['lon'])
我得到TypeError: 'InvalidOperation' object is not callable
。我错过了什么?
MySQL使用点字符(句点)作为数字文字中的小数分隔符,而不是逗号字符。
要插入十进制值,SQL语句将是这样的
( ..., lat, lon, ...) VALUES ( ... , '45.451691' , '9.161442' , ...)
-- ^ ^
使用字符串中的逗号字符,MySQL正在删除逗号和逗号之后的所有内容。
作为正在发生的事情的演示,请考虑:
SELECT '123.456789' + 0
, '123,456789' + 0
, '123derpity' + 0
参考文献:
https://dev.mysql.com/doc/refman/5.7/en/number-literals.html
数字可能包括。作为小数点分隔符。