查询在 MySQL 工作台中有效,但在 MySQL 连接器中无效

Posted

技术标签:

【中文标题】查询在 MySQL 工作台中有效,但在 MySQL 连接器中无效【英文标题】:Query works in MySQL workbench, but not in MySQL connector 【发布时间】:2014-04-08 00:35:08 【问题描述】:

所以我的问题在于,当我尝试运行查询时,这个特定的查询:

SELECT call_start_time, call_end_time, sid FROM calls WHERE (call_start_time BETWEEN
'2014-01-08 00:00:00' AND '2014-01-09 00:00:00') AND voice_info_id IS NOT NULL AND
call_start_time IS NOT NULL AND call_end_time IS NOT NULL

它在工作台中运行并返回我想要的正确数据,但是当我尝试使用 mysql 连接器和 Python 在下面的代码中运行查询时,它抱怨语法不正确,即使它是正确的。我已经彻底查看了连接器文档,但在我正在做的事情与连接器文档上的使用连接器/Python 查询数据页面上的示例之间找不到任何完全不同的地方。我正在使用的代码如下:

from time import *
import numpy as np
import matplotlib.pyplot as plt
import mysql.connector
from datetime import datetime
from sets import Set

config = 
    'user': 'xxxxxxxxx',
    'password': 'xxxxxxxxx',
    'host': '127.0.0.1',
    'database': 'xxxxxxxxx',
    'raise_on_warnings': True,


tick = set([])
epoch_start_call_set = set([])
epoch_end_call_set = set([])
from mysql.connector import errorcode
try:
    cnx = mysql.connector.connect(**config)
    cursor = cnx.cursor()
    print("DATABASE CONNECTION ESTABLISHED")
    print

    userIn = raw_input("Type Start Date (MM-DD-YYYY): ")
    userEnd = raw_input("Type End Date (MM-DD-YYYY): ")
    startdate = datetime.strptime(userIn, '%m-%d-%Y')
    enddate = datetime.strptime(userEnd, '%m-%d-%Y')
    epoch_s = mktime(startdate.timetuple())
    epoch_e = mktime(enddate.timetuple())
    while epoch_s <= epoch_e:
        current_tick = epoch_s + 60
        epoch_s += 60
        tick.add(current_tick)

    query = "SELECT call_start_time, call_end_time, sid FROM calls" \
            "WHERE call_start_time BETWEEN %s AND %s " \
            "AND voice_info_id IS NOT NULL AND call_start_time IS NOT NULL " \
            "AND call_end_time IS NOT NULL"
    cursor.execute(query, (startdate, enddate))


except mysql.connector.Error as err:
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
        print("Your password or username is incorrect, please try again")
    elif err.errno == errorcode.ER_BAD_DB_ERROR:
        print("Your database does not exist, please try again")
    else:
        print(err)
else:
    cnx.close()

我正在查看的数据在工作台中,还有很多,但这是我正在测试的样本。 http://i.imgur.com/LzQn6py.png

这是我在工作台中运行查询的结果: http://i.imgur.com/HFeCp9y.png

这是我想要的结果。我的查询失败是否有特殊原因?我尝试重写并手动替换查询中的确切日期,而不是使用参数注入,但似乎没有什么可以解决它。

【问题讨论】:

【参考方案1】:

错别字:

query = "SELECT call_start_time, call_end_time, sid FROM calls" \
                                                              ^---
         "WHERE call_start_time BETWEEN %s AND %s " \
         ^---

您在指定位置缺少一个空格,生成:

SELECT ... FROM callsWHERE
                     ^---

【讨论】:

哇,这太愚蠢了。我应该更加小心我的换行符!

以上是关于查询在 MySQL 工作台中有效,但在 MySQL 连接器中无效的主要内容,如果未能解决你的问题,请参考以下文章

查询在 Access 中有效,但在 MySQL 中无效

远程 mysql 连接在工作台中有效,但在 python 中无效

Python MySQLdb 转义字符:查询在 MySQL 中有效,但在 python MySQLdb 中无效

MySQL:更新视图在 MySQL 5.7 上失败,但在 5.6 上有效

MySql 查询在 PHPmyadmin 中工作,但在 codeigniter 中不工作

MySQL Query 在 PhpMyAdmin 中有效,但在 JAVA Eclipse 中无效