您似乎假设cursor.execute 的返回值是运行查询的结果,但看起来 PyMySQL 返回结果集中的行数。结果集本身是通过对单行调用 cursor.fetchone() 或对一行或多行调用 cursor.fetchall() 或通过遍历游标来获得的。
此外,尚不清楚您究竟想要检索什么,但这个示例可能会有所帮助:
import pymysql
tablename = 'accounts_test'
DDL0 = f"""DROP TABLE IF EXISTS `{tablename}`"""
DDL1 = f"""CREATE TABLE `{tablename}` (username VARCHAR(32))"""
conn = pymysql.connect(database='test')
with conn:
cur = conn.cursor()
cur.execute(DDL0)
cur.execute(DDL1)
cur.executemany(f"""INSERT INTO `{tablename}` (username) VALUES (%s)""",
[('Alan',), ('Alexandra',), ('Algernon',), ('Alice',),
('Bob',), ('Carol',), ('Dave',)])
conn.commit()
# Fetch all rows with usernames starting with "Al"
name = 'Al%'
sql_search = f"""SELECT username FROM `{tablename}` WHERE username LIKE %s"""
cur.execute(sql_search, (name,))
rows = cur.fetchall()
print('Query 1')
for row in rows:
print(row)
print()
# Fetch all rows with username equal to "Bob"
sql_search = f"""SELECT username FROM `{tablename}` WHERE username = %s"""
name = 'Bob'
cur.execute(sql_search, (name,))
row = cur.fetchone()
print('Query 2')
print(row)
输出
Query 1
('Alan',)
('Alexandra',)
('Algernon',)
('Alice',)
Query 2
('Bob',)
请注意,每一行都是一个tuple - 您可以使用row[0] 获取第一个也是唯一一个元素的值。