You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用raw_input查询MySQL数据库accounts表失败求助(含SIGSEGV错误)

问题分析与解决方案

首先咱们先理清楚整个问题的脉络:你最初的代码存在模糊查询参数错误,修改参数后又遇到了段错误(SIGSEGV),咱们一步步来解决。

一、最初的模糊查询逻辑问题

你最初的代码里有两个关键错误,导致查询无法正确匹配子串:

  1. LIKE语句缺少通配符:LIKE %s只会精确匹配输入的字符串,要实现子串模糊匹配,必须在参数前后加上%,比如%w%、%web%才能匹配包含对应子串的记录。
  2. 参数格式错误:MySQLdb要求参数必须是元组类型,你写的data = (search)其实不是元组(括号在这里只是优先级符号),正确的写法是data = (search,)(末尾必须加逗号)。

你后来修改的data = ('%' + search + '%',)是完全正确的,这部分逻辑没问题。

二、段错误(exit code 139, SIGSEGV)的原因与排查

这个错误属于内存访问异常,通常和Python解释器、数据库驱动的兼容性或环境问题有关,而非代码逻辑错误。下面是具体的排查和解决方向:

1. 先排除PyCharm环境问题

有时候PyCharm的运行/调试配置会触发这类异常,先试试在终端直接运行脚本:

python your_script_name.py

如果终端运行正常,那问题出在PyCharm的配置上:

  • 检查项目的Python解释器是否选对了(确保是你安装了MySQLdb的那个Python2.7环境)
  • 关闭PyCharm的调试模式,用普通运行模式试试

2. 检查版本兼容性

你用的是Python2.7(从raw_input和无括号的print可以看出来),必须确保:

  • MySQLdb版本适配Python2.7:推荐安装MySQL-python==1.2.5,这是Python2.7环境下最稳定的版本。如果是MySQL 8.0,这个版本可能不兼容,需要换成mysqlclient==1.3.14(支持Python2.7和MySQL8.0)。
  • MySQL服务器版本与驱动兼容:比如MySQL 5.7和MySQL-python适配良好,MySQL8.0则需要用mysqlclient。

3. 重新安装数据库驱动

驱动包损坏也可能导致内存错误,卸载后重新安装:

# 卸载现有驱动
pip uninstall -y MySQL-python
# 安装适配版本
pip install MySQL-python==1.2.5
# 如果是MySQL8.0,换成这个:
# pip install mysqlclient==1.3.14

4. 完善代码的资源释放逻辑

虽然这不是段错误的直接原因,但未正确关闭数据库连接/游标可能导致资源泄漏,建议加上finally块确保资源释放:

def SearchRecords(self):
    search = raw_input("Insert value to be searched in the DB:")
    db = None
    cursor = None
    try:
        db = MySQLdb.connect("localhost", "root", "studio", "PManDB")
        cursor = db.cursor()
        sql = """SELECT * FROM accounts WHERE website LIKE %s"""
        data = ('%' + search + '%',)
        cursor.execute(sql, data)
        result = cursor.fetchall()
        
        print "The research has been made with success"
        # 更友好的结果打印
        for row in result:
            print "Website: {}, Username: {}, Password: {}".format(row[0], row[1], row[2])
    except Exception as e:
        # 捕获具体错误信息,方便排查
        print "There is an error: {}".format(str(e))
        if db:
            db.rollback()
    finally:
        # 确保关闭游标和连接
        if cursor:
            cursor.close()
        if db:
            db.close()

5. 极简脚本测试

写一个最简化的测试脚本,排查是不是查询逻辑本身的问题:

import MySQLdb

try:
    db = MySQLdb.connect("localhost", "root", "studio", "PManDB")
    cursor = db.cursor()
    # 执行简单查询
    cursor.execute("SELECT COUNT(*) FROM accounts")
    print "Total records:", cursor.fetchone()[0]
except Exception as e:
    print "Error:", str(e)
finally:
    cursor.close()
    db.close()

如果这个脚本也崩溃,说明是驱动或环境的兼容性问题;如果正常运行,那问题可能出在原代码的输入处理或结果打印环节(比如结果中有特殊数据类型)。

内容的提问来源于stack exchange,提问作者Marco Giuseppe de Pinto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:47:06