[英]I keep getting "expected an indented block" when running my python code on idle
[英]Who do I keep getting "None" as a result of running my Python code in IDLE?
可能是一个愚蠢的问题抱歉。 所以我的数据库中有一个带有 pic 列的表,那里有图片。 我需要随机获取一个,并在被询问时通过我的 Telegram 机器人发布。 我已经通过 MySQL 工作台检查了与 DB 的连接,它很好,所以代码是问题所在。 这里是:
import mysql.connector
cnx = mysql.connector.connect(
host="***",
port='3306',
user="***",
password="***",
database ="***"
)
cursor = cnx.cursor(buffered=True)
query = ("SELECT pic FROM pets ORDER BY RAND() LIMIT 1")
result = cursor.execute(query)
print(result)
cursor.close()
cnx.close()
当我在 IDLE 中运行它时,我得到“无”,没有别的。
是因为我需要以某种方式指定如何显示此类数据(图片)? 在 MySQL 查询的工作台结果只是字节,所以我认为它会像那样显示
我试过将结果转换成某种类型的数据,但得到了这个:
回溯(最近一次通话最后一次):文件“/Users/olina/Desktop/test.py”,第 19 行,在 <module> turnintobyte = bytes(result) TypeError: cannot convert 'NoneType' object to bytes
所以看起来它根本没有从查询中获取任何数据,但我不明白为什么。 请帮助我被卡住了
人们可能期望cursor.execute()
会返回某种值,但事实并非如此。
数据可在cursor
本身内部获得。
如果您查看文档 ( https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html ) 中的示例,您将看到这个。
没有返回,只有执行,如果有返回那么它就是这样一个iterator
:
cursor.execute(operation, params=None, multi=False)
iterator = cursor.execute(operation, params=None, multi=True)
这就是为什么result
什么都不显示的原因。
要使结果返回某些内容,则需要cursor.fetchone()
或cursor.fetchall()
(如评论之一所建议的那样)或将结果作为迭代器循环(如示例所示)等...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.