需要帮助使用 pymysql 在数据库中搜索特定值
Posted
技术标签:
【中文标题】需要帮助使用 pymysql 在数据库中搜索特定值【英文标题】:Need help searching a database for a specific value with pymysql 【发布时间】:2021-09-29 19:48:05 【问题描述】:cur = conn.cursor()
sql_search = 'SELECT * FROM accounts WHERE username LIKE ' + '\'' + name + '\''
print(sql_search)
all2 = cur.execute(sql_search)
all = cur.fetchone()
print(all)
print(all2)
在我的 phpmyadmin 数据库中运行此 sql 会找到我正在寻找的值,但是当我从我的 python 程序中运行它时,它会返回 0 或无。我需要从数据库中取出值并将其放入一个字符串中。
【问题讨论】:
您从print()
电话中得到了什么?不相关,但是当您调用变量all
时,您隐藏了一个内置函数
从所有 print() 语句中,我实际上得到了我想要的,但我现在真正的主要问题是,当我将值与 if 语句进行比较时,if 语句说它们不一样,当它们是
【参考方案1】:
您似乎假设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]
获取第一个也是唯一一个元素的值。
【讨论】:
以上是关于需要帮助使用 pymysql 在数据库中搜索特定值的主要内容,如果未能解决你的问题,请参考以下文章