从请求中获取十进制值并在mysql中插入

yzckvree  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(301)

我有一个带博物馆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 .
我错过了什么?

w41d8nur

w41d8nur1#

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
数字可能包括。作为小数点分隔符。

相关问题