【问题标题】:Python and MySQL-Connector-PythonPython 和 MySQL-连接器-Python
【发布时间】:2019-06-15 02:27:14
【问题描述】:

请注意,我在 Windows 操作系统上使用以下 Python 版本:

(venv) C:\>python
    Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.

*下面的 Python 脚本运行,输出显示在它下面的目录中。该脚本的大部分内容来自以下来源:

https://pynative.com/python-mysql-select-query-to-fetch-data/

脚本 1

import mysql.connector
from mysql.connector import Error
try:
    cnx = mysql.connector.connect(user='root', password='coldplay123',
                                  host='localhost',
                                  database='nathan_test_1')

    cursor_1 = cnx.cursor()
    s1="select * from dataframe"
    cursor_1.execute(s1)
    data1 = cursor_1.fetchall()

    print("Total number of dataframes: ", cursor_1.rowcount)

    for i1 in data1:
        print(i1)
    cursor_1.close()

except Error as e1:
    print("Failure to connect ... ", e1)

cnx.close()

脚本 1 的输出

Total number of dataframes:  1
('a', 'b', 'c', 699)

*现在,我只更改脚本 1 中的两行 在中间通过简单地注释掉它们 并生成以下输出:

脚本 2

import mysql.connector
from mysql.connector import Error
try:
    cnx = mysql.connector.connect(user='root', password='coldplay123',
                                  host='localhost',
                                  database='nathan_test_1')

    cursor_1 = cnx.cursor()
    #s1="select * from nathan"
    #cursor_1.execute(s1)
    data1 = cursor_1.fetchall()

    print("Total number of dataframes: ", cursor_1.rowcount)

    for i1 in data1:
        print(i1)
    cursor_1.close()

except Error as e1:
    print("Failure to connect ... ", e1)

cnx.close()

脚本 2 的输出

Failure to connect ...  No result set to fetch from.

*很容易看出是什么导致了这个错误,但是为什么没有 允许“cursor_1”执行给定的 SQL 查询导致此 错误?

【问题讨论】:

    标签: python mysql mysql-connector mysql-connector-python


    【解决方案1】:

    根据PEP 249 - Python Database API Specification v2.0 fetchone, fetchmany, fetchall documentation

    如果先前对 .execute*() 的调用未产生任何结果集或尚未发出任何调用,则会引发错误(或子类)异常。

    fetch*() 调用后应跟execute 调用。

    【讨论】:

      猜你喜欢
      • 2020-08-16
      • 1970-01-01
      • 2020-02-16
      • 2021-07-12
      • 2018-06-27
      • 2016-01-16
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      相关资源
      最近更新 更多