python - Mysql似乎无法识别Python中的WHERE语句

标签 python mysql sql python-3.x

在创建一个新程序来处理数据库时,我遇到了一个问题。

mysql游标似乎没有注意到以下函数中的WHERE语句:

def get_new_entries(self, delay):
start_time = t.time()
while True:
    cursor = self.cnx.cursor()

    check_delay = delay * 2

    current_time = datetime.datetime.now() - datetime.timedelta(seconds=check_delay)
    current_time = current_time.strftime("%Y-%m-%d %H:%M:%S")

    data = current_time
    print(current_time)

    query = """SELECT FILE_NAME, CREATION_TIME FROM `added_files` WHERE CREATION_TIME < %s"""
    cursor.execute(query, (data,))

    print(query)
    for (FILE_NAME, CREATION_TIME) in cursor:
        print(FILE_NAME)
        print(CREATION_TIME)

    cursor.close()
    cursor = None
    print("###################")
    t.sleep(delay - ((t.time() - start_time) % delay))

通过这个函数,我希望实现该函数每分钟检查过去一分钟内的新条目。最后我希望它将文件名作为列表发送到另一个类,以便该类可以使用逻辑来处理文件名。

但是,WHERE CREATION_TIME < '%s' 似乎没有执行任何操作。它要么不返回任何条目,而在 mysql 环境中尝试相同的查询本身会执行它应该执行的操作。然而,如果“<”更改为“>”,它会突然返回所有项目,甚至是那些不应返回的项目。

话虽如此,我也仅使用了这部分代码

cursor.execute(query)

当查询更改为

query = "SELECT FILE_NAME, CREATION_TIME FROM添加的文件 WHERE CREATION_TIME < {}".format(current_time)

这第一次有效,但第二次在循环中它没有响应任何内容,即使我确实向数据库添加了内容。我在浏览器中使用了与mysql环境中使用的程序相同的日期时间,它返回了正确的结果,但程序没有。

那么为什么它不起作用呢?我应该怎么做才能让它发挥作用?

最佳答案

过了一段时间我就解决了这个问题。它与我发送的代码无关,但与 MYSQL 连接缺少 autocommit = True 有关。我会尝试解释。

我的应用程序必须检查由另一个 (C#) 应用程序自动更新的数据库。对于每个新文件,C# 应用程序发现它在数据库中创建了一个新条目。同时,这个 Python 应用程序每隔延迟(例如 60.0 秒)检查新文件名。

Python 应用程序通过 mysql.connector 打开一个连接,并且似乎在该时刻保持数据库的状态。添加到其中的任何内容都不会被您发布的任何代码找到,因为它不会在实际数据库中搜索,而是在自己保存的数据库版本中搜索。

修复方法是将连接设置为自动提交。所以你会这样做:

self.cnx = mysql.connector.connect(user='root', password='', host='127.0.0.1', database='mydb')
self.cnx.autocommit = True

每次执行 SQL 查询时,这都会更新 Python 应用程序中数据库的保存状态。

所以你没有从 python 中的 sql 查询中得到你所期望的结果,请尝试将你的连接的 autocommit 设置为 true 。

关于python - Mysql似乎无法识别Python中的WHERE语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49515830/

相关文章:

python - 使用 matplotlib imshow 在 for 循环中显示 numpy 数组

python - 将静态 Assets 从本地机器部署到 heroku - 无法打开文件 'manage.py' : [Errno 2] No such file or directory

python Selenium : move_to_element() not working

sql:如何删除重复行(内容相同,但顺序不同)

c# - 使用的sql server版本不支持数据类型 'datetime2'

python - 查询集过滤月份返回空

php - 如何在 laravel Eloquent 中按相关表的列排序?

MySQL:如何按日期每n天选择行

mysql - 将数据库从开发迁移到生产 - rails

sql - 在 PostgreSQL 中索引空值