Python-从请求中获取十进制值并在MySQL中插入

Python-从请求中获取十进制值并在MySQL中插入,python,mysql,flask,floating-point,Python,Mysql,Flask,Floating Point,我有一个带博物馆桌子的MySQL数据库: +-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | idMuseums |

我有一个带博物馆桌子的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']
    就像在这个例子中,我没有得到数据库中逗号后面的数字(例如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)
    ,它可以工作!谢谢