需要帮助使用 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 在数据库中搜索特定值的主要内容,如果未能解决你的问题,请参考以下文章

在所有表中的所有字段中搜索特定值 (Oracle)

如何在子表单中搜索特定值以返回 VBA 结果

如何在值列中搜索特定值并在 Big Query SQL 中替换为该特定值?

查询以在 db 列中搜索特定值

在大型数据库中搜索特定 ID?

在目录中搜索特定文件名