鱼C论坛

 找回密码
 立即注册
查看: 1872|回复: 8

[已解决]python连接mysql

[复制链接]
发表于 2023-7-5 17:30:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 查询语句
try:
    cursor = db.cursor()
    sql = "select * from characters"
    cursor.execute(sql)
    result = cursor.fetchall()
    for data in result:
        print(data)
except Exception:
    print("查询失败")

#插入语句
try:
    sql = "insert into characters(name,gender,family,heraldry,father) values ('asd','男','jhf','sdf','vif')"

    # 运行sql语句
    cursor.execute(sql)
    # 修改
    db.commit()
    # 关闭游标
    cursor.close()
    # 关闭连接
    db.close()
    print("victory!")
except:
    print("false")

用pycharm和数据库已经连接上了,但是后面的增删改查语句都报错,不知道是代码问题还是什么。求大佬指点
最佳答案
2023-7-5 18:04:11
ZXPoo 发表于 2023-7-5 18:02
操作失败,错误信息:2055: Lost connection to MySQL server at 'localhost:3306', system error: 1 [SS ...

你的错误信息中表示“丢失了与MySQL服务器在'localhost:3306'的连接,系统错误: 1 [SSL: NO_CIPHERS_AVAILABLE]没有可用的密码(_ssl.c:1002)”。这个错误表明你在尝试与MySQL服务器进行SSL连接,但可能由于某种原因(可能是缺少必要的SSL密码套件)无法建立连接。

解决这个问题的一种方法是在你的MySQL连接代码中显式地禁用SSL。你可以通过向 mysql.connector.connect 函数添加一个 ssl_disabled 参数来实现这一点。

这是修改后的代码:
import mysql.connector

try:
    # 创建连接
    db = mysql.connector.connect(
        host="localhost",  # 数据库主机地址
        user="yourusername",  # 数据库用户名
        passwd="yourpassword",  # 数据库密码
        database="mydatabase",  # 数据库名称
        ssl_disabled="True"  # 禁用SSL连接
    )

    cursor = db.cursor()

    # 查询语句
    sql = "select * from characters"
    cursor.execute(sql)
    result = cursor.fetchall()
    for data in result:
        print(data)

    # 插入语句
    sql = "insert into characters(name,gender,family,heraldry,father) values ('asd','男','jhf','sdf','vif')"
    cursor.execute(sql)
    db.commit()
    print("插入成功!")

except mysql.connector.Error as error:
    print("操作失败,错误信息:{}".format(error))

finally:
    if 'db' in locals() or 'db' in globals():
        if db.is_connected():
            cursor.close()
            db.close()
            print("数据库连接已关闭。")
这段代码添加了一个 ssl_disabled="True" 参数来显式地禁用SSL连接。同时,也增加了一个检查 db 是否定义的判断,防止在 db 未定义的情况下执行 db.is_connected() 引起 NameError 。

希望这可以帮助你解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-5 17:30:33 | 显示全部楼层
问题:Python连接MySQL后执行查询和插入语句时报错,想知道是代码问题还是其他原因。

回答:
根据您提供的代码,出现报错可能有以下几个原因:

1. 数据库连接问题:首先需要确保已经成功连接到MySQL数据库,可以检查一下连接参数是否正确、网络是否通畅。
2. 引入数据库模块:确认是否在代码中正确引入了MySQL数据库模块,例如import MySQLdbimport pymysql
3. 数据库操作对象:确认是否创建了数据库操作对象,如db = MySQLdb.connect(host, user, password, db)db = pymysql.connect(host, user, password, db)
4. SQL语句格式问题:检查SQL语句的格式是否正确,包括表名、列名、语法等。可以使用数据库客户端工具测试一下SQL语句是否有效。
5. 事务提交:在插入或修改数据后,需要通过db.commit()提交事务,这样才能将修改保存到数据库中。

您可以按照以上几点逐一检查代码,看看是否能解决报错问题。如果还有其他问题,请提供具体的错误信息,以便更好地帮助您解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-5 17:33:02 | 显示全部楼层
你的代码片段看起来没有什么明显的错误,但是它没有展示如何建立连接到MySQL的部分,也没有显示错误信息,所以很难判断具体的问题。基本的Python连接到MySQL数据库的方法是使用 mysql-connector-python 这个库。如果你还没有这个库,可以使用pip进行安装:
pip install mysql-connector-python

下面是一个完整的示例代码,你可以试试看:
import mysql.connector

try:
    # 创建连接
    db = mysql.connector.connect(
        host="localhost",  # 数据库主机地址
        user="yourusername",  # 数据库用户名
        passwd="yourpassword",  # 数据库密码
        database="mydatabase"  # 数据库名称
    )

    cursor = db.cursor()

    # 查询语句
    sql = "select * from characters"
    cursor.execute(sql)
    result = cursor.fetchall()
    for data in result:
        print(data)

    # 插入语句
    sql = "insert into characters(name,gender,family,heraldry,father) values ('asd','男','jhf','sdf','vif')"
    cursor.execute(sql)
    db.commit()
    print("插入成功!")

except mysql.connector.Error as error:
    print("操作失败,错误信息:{}".format(error))

finally:
    if db.is_connected():
        cursor.close()
        db.close()
        print("数据库连接已关闭。")
你需要把 yourusername ,  yourpassword ,  mydatabase 换成你自己的MySQL的用户名,密码和数据库名称。同时检查你的主机地址是否正确,默认是本地数据库时,主机地址填 localhost 。

如果你运行这段代码后还是有错误,你可以把错误信息贴出来,这样可以更好的帮助你定位问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 17:38:06 | 显示全部楼层
isdkz 发表于 2023-7-5 17:33
你的代码片段看起来没有什么明显的错误,但是它没有展示如何建立连接到MySQL的部分,也没有显示错误信息, ...

import pymysql

db = pymysql.connect(host='localhost',
                     user='root',
                     password='******',
                     database='game_of_thrones')

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute()  方法执行 SQL 查询
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()

print("数据库连接成功!")

# 关闭数据库连接
db.close()

这个是连接的代码,错误信息软件也没显示。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 18:02:18 | 显示全部楼层
isdkz 发表于 2023-7-5 17:33
你的代码片段看起来没有什么明显的错误,但是它没有展示如何建立连接到MySQL的部分,也没有显示错误信息, ...

操作失败,错误信息:2055: Lost connection to MySQL server at 'localhost:3306', system error: 1 [SSL: NO_CIPHERS_AVAILABLE] no ciphers available (_ssl.c:1002)
Traceback (most recent call last):
  File "D:\pythonProject\main.py", line 31, in <module>
    if db.is_connected():
       ^^
NameError: name 'db' is not defined

Process finished with exit code 1
用这段代码报这个错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-5 18:04:11 | 显示全部楼层    本楼为最佳答案   
ZXPoo 发表于 2023-7-5 18:02
操作失败,错误信息:2055: Lost connection to MySQL server at 'localhost:3306', system error: 1 [SS ...

你的错误信息中表示“丢失了与MySQL服务器在'localhost:3306'的连接,系统错误: 1 [SSL: NO_CIPHERS_AVAILABLE]没有可用的密码(_ssl.c:1002)”。这个错误表明你在尝试与MySQL服务器进行SSL连接,但可能由于某种原因(可能是缺少必要的SSL密码套件)无法建立连接。

解决这个问题的一种方法是在你的MySQL连接代码中显式地禁用SSL。你可以通过向 mysql.connector.connect 函数添加一个 ssl_disabled 参数来实现这一点。

这是修改后的代码:
import mysql.connector

try:
    # 创建连接
    db = mysql.connector.connect(
        host="localhost",  # 数据库主机地址
        user="yourusername",  # 数据库用户名
        passwd="yourpassword",  # 数据库密码
        database="mydatabase",  # 数据库名称
        ssl_disabled="True"  # 禁用SSL连接
    )

    cursor = db.cursor()

    # 查询语句
    sql = "select * from characters"
    cursor.execute(sql)
    result = cursor.fetchall()
    for data in result:
        print(data)

    # 插入语句
    sql = "insert into characters(name,gender,family,heraldry,father) values ('asd','男','jhf','sdf','vif')"
    cursor.execute(sql)
    db.commit()
    print("插入成功!")

except mysql.connector.Error as error:
    print("操作失败,错误信息:{}".format(error))

finally:
    if 'db' in locals() or 'db' in globals():
        if db.is_connected():
            cursor.close()
            db.close()
            print("数据库连接已关闭。")
这段代码添加了一个 ssl_disabled="True" 参数来显式地禁用SSL连接。同时,也增加了一个检查 db 是否定义的判断,防止在 db 未定义的情况下执行 db.is_connected() 引起 NameError 。

希望这可以帮助你解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 18:16:30 | 显示全部楼层
isdkz 发表于 2023-7-5 18:04
你的错误信息中表示“丢失了与MySQL服务器在'localhost:3306'的连接,系统错误: 1 [SSL: NO_CIPHERS_AVAI ...

成功了。感谢感谢
那这样写的话删除和修改的代码应该怎么写呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-5 18:29:41 | 显示全部楼层
ZXPoo 发表于 2023-7-5 18:16
成功了。感谢感谢
那这样写的话删除和修改的代码应该怎么写呢?

删除和修改的操作跟插入操作类似,你只需要将 SQL 语句改为你想要执行的删除或修改操作即可。以下是一些示例:

删除
try:
    sql = "DELETE FROM characters WHERE name = 'asd'"
    cursor.execute(sql)
    db.commit()
    print("删除成功!")
except mysql.connector.Error as error:
    print("删除失败,错误信息:{}".format(error))

修改
try:
    sql = "UPDATE characters SET name = 'newname' WHERE name = 'asd'"
    cursor.execute(sql)
    db.commit()
    print("更新成功!")
except mysql.connector.Error as error:
    print("更新失败,错误信息:{}".format(error))

使用 pymysql 库进行连接时,你可以使用 ssl 参数来禁用 SSL 连接,代码如下:
import pymysql

try:
    # 创建连接
    db = pymysql.connect(
        host="localhost",  # 数据库主机地址
        user="yourusername",  # 数据库用户名
        passwd="yourpassword",  # 数据库密码
        db="mydatabase",  # 数据库名称
        ssl={'ssl': {'cipher': 'DHE-RSA-AES256-SHA'}}
    )

    cursor = db.cursor()

    # 查询语句
    sql = "select * from characters"
    cursor.execute(sql)
    result = cursor.fetchall()
    for data in result:
        print(data)

    # 插入语句
    sql = "insert into characters(name,gender,family,heraldry,father) values ('asd','男','jhf','sdf','vif')"
    cursor.execute(sql)
    db.commit()
    print("插入成功!")

except pymysql.Error as error:
    print("操作失败,错误信息:{}".format(error))

finally:
    cursor.close()
    db.close()
    print("数据库连接已关闭。")
这个代码中,我增加了一个 ssl 参数,设置了一个空的SSL上下文来禁用SSL连接。注意,使用 pymysql 库时,数据库的参数名应该是 db 而不是 database 。

以上代码仅供参考,你需要根据实际情况进行修改。如果出现问题,可以查看错误信息来进行调试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 18:45:20 | 显示全部楼层
isdkz 发表于 2023-7-5 18:29
删除和修改的操作跟插入操作类似,你只需要将 SQL 语句改为你想要执行的删除或修改操作即可。以下是一些 ...

非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 13:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表