我有一个带博物馆table的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向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']
就像在这个例子中,我没有得到db中逗号后面的数字(例如45.0000009.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
.
我错过了什么?
1条答案
按热度按时间w41d8nur1#
mysql在数字文本中使用点字符(句点)作为小数分隔符,而不是逗号字符。
要插入十进制值,sql语句应该是这样的
字符串中包含逗号字符,mysql将删除逗号以及逗号后面的所有内容。
作为正在发生的事情的演示,请考虑:
参考文献:
https://dev.mysql.com/doc/refman/5.7/en/number-literals.html
数字可能包括。作为小数点分隔符。