【问题标题】:inconsistent results from LIKE query: pyodbc vs. AccessLIKE 查询的结果不一致:pyodbc 与 Access
【发布时间】:2017-03-22 09:41:40
【问题描述】:

作为我的 Python 脚本的一部分,我得到了一堆应该在 Access 数据库中执行的查询。不幸的是,直接在 MS Access 中使用的查询给出了一些输出记录,在 Python 脚本中什么也不返回(也没有错误)。与数据库的连接和一般语法应该很好,因为简单的查询(比如从表中选择一列)工作得很好。这是带有这些给定查询之一的代码:

import pyodbc

baza = r"C:\base.mdb"
driver = "{Microsoft Access Driver (*.mdb, *.accdb)}"

access_con_string = r"Driver={};Dbq={};".format(driver, baza)
cnn = pyodbc.connect(access_con_string)
db_cursor = cnn.cursor()

expression = """SELECT F_PARCEL.PARCEL_NR, F_PARCEL_LAND_USE.AREA_USE_CD, F_PARCEL_LAND_USE.SOIL_QUALITY_CD, F_ARODES.TEMP_ADRESS_FOREST, F_SUBAREA.AREA_TYPE_CD, F_AROD_LAND_USE.AROD_LAND_USE_AREA, F_PARCEL.COUNTY_CD, F_PARCEL.DISTRICT_CD, F_PARCEL.MUNICIPALITY_CD, F_PARCEL.COMMUNITY_CD, F_SUBAREA.SUB_AREA
FROM F_PARCEL INNER JOIN (F_PARCEL_LAND_USE INNER JOIN ((F_ARODES INNER JOIN F_AROD_LAND_USE ON F_ARODES.ARODES_INT_NUM = F_AROD_LAND_USE.ARODES_INT_NUM) INNER JOIN F_SUBAREA ON F_ARODES.ARODES_INT_NUM = F_SUBAREA.ARODES_INT_NUM) ON (F_PARCEL_LAND_USE.SHAPE_NR = F_AROD_LAND_USE.SHAPE_NR) AND (F_PARCEL_LAND_USE.PARCEL_INT_NUM = F_AROD_LAND_USE.PARCEL_INT_NUM)) ON F_PARCEL.PARCEL_INT_NUM = F_PARCEL_LAND_USE.PARCEL_INT_NUM
WHERE (((F_ARODES.TEMP_ADRESS_FOREST) Like ?) AND ((F_AROD_LAND_USE.AROD_LAND_USE_AREA)<?) AND ((F_ARODES.TEMP_ACT_ADRESS)= ?))
ORDER BY F_PARCEL.PARCEL_NR, F_PARCEL_LAND_USE.SHAPE_NR;"""

rows = db_cursor.execute(expression, ("14-17-2-03*", 0.0049, True)).fetchall()

for row in rows:
    print row

cnn.close()

我知道这些查询是从 MS Access 中的查询生成器生成的,所以我想知道这可能会导致差异,但另一方面,这仍然是 access 数据库。

无论如何,问题似乎出在 SQL 中,所以我想知道哪些元素可能导致直接在 MS Access 中执行的查询和通过 pyodbc 连接执行的查询之间的输出不同?

【问题讨论】:

    标签: python sql ms-access pyodbc


    【解决方案1】:

    在 Access 本身中运行的查询与从外部应用程序中运行的查询之间的 LIKE 通配符差异让您感到困惑。

    从 Access 本身运行查询时,您需要使用星号作为通配符:"14-17-2-03*"

    从外部应用程序(如 Python 应用程序)运行查询时,您需要使用百分号作为通配符:"14-17-2-03%"

    【讨论】:

    • ALIKE 怎么样?
    猜你喜欢
    • 2010-10-24
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多