【问题标题】:SQLalchemy - query by like for float columnSQLalchemy - 通过like查询浮点列
【发布时间】:2016-08-25 14:23:50
【问题描述】:

我想从 ajax 查询我的数据库中的浮点变量(地图坐标)等记录。(查询浮点列)。我不确定like方法是否可以查询字符串以外的数据类型,因为这不起作用...

data = json.loads(request.data)

        markers = session.query(Markers) \
        .filter( Markers.lat.like( '%' + data['lat'] + '%' ) ) \
        .filter( Markers.lng.like( '%' + data['lng'] + '%' ) ) \
        .order_by(func.random()).limit(7).all()

        if len(markers) <= 0:
            return jsonify( resp = 'no results' )
        else:
            return jsonify( resp = 'markers', markers = [m.serialize for m in markers] )

我什至尝试使用 str() 将其设为字符串,但仍然出现此错误:

    ProgrammingError: (ProgrammingError) operator does not exist: double precision ~~ unknown
LINE 3: WHERE markers.lat LIKE '%%' AND markers.lng LIKE '%%' ORDER ...
                          ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
 'SELECT markers.id AS markers_id, markers.type AS markers_type, markers.name AS markers_name, markers.location AS markers_location, markers.lat AS markers_lat, markers.lng AS markers_lng, markers.icon AS markers_icon, markers.message AS markers_message, markers.date AS markers_date, markers.place_id AS markers_place_id, markers.owner AS markers_owner \nFROM markers \nWHERE markers.lat LIKE %(lat_1)s AND markers.lng LIKE %(lng_1)s ORDER BY random() \n LIMIT %(param_1)s' {'lng_1': '%%', 'param_1': 7, 'lat_1': '%%'}

怎么了? sqlalchemy func 模块是否可以将浮点列查询为字符串?我该如何解决?谢谢!

ps 我正在使用 postgresql

【问题讨论】:

    标签: python postgresql sqlalchemy


    【解决方案1】:

    您需要将浮点数转换为字符串

    from sqlalchemy import cast, String
    
    markers = session.query(Markers) \
            .filter(cast(Markers.lat, String()).like('%' + data['lat'] + '%')) 
    

    【讨论】:

    • 我会试一试的。谢谢!
    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 2021-12-19
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    相关资源
    最近更新 更多