鱼C论坛

 找回密码
 立即注册
查看: 3196|回复: 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 参数来实现这一点。

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

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

  11.     cursor = db.cursor()

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

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

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

  25. finally:
  26.     if 'db' in locals() or 'db' in globals():
  27.         if db.is_connected():
  28.             cursor.close()
  29.             db.close()
  30.             print("数据库连接已关闭。")
复制代码

这段代码添加了一个 ssl_disabled="True" 参数来显式地禁用SSL连接。同时,也增加了一个检查 db 是否定义的判断,防止在 db 未定义的情况下执行 db.is_connected() 引起 NameError 。

希望这可以帮助你解决问题。
小甲鱼最新课程 -> https://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()提交事务,这样才能将修改保存到数据库中。

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

使用道具 举报

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


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

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

  10.     cursor = db.cursor()

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

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

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

  24. finally:
  25.     if db.is_connected():
  26.         cursor.close()
  27.         db.close()
  28.         print("数据库连接已关闭。")
复制代码

你需要把 yourusername ,  yourpassword ,  mydatabase 换成你自己的MySQL的用户名,密码和数据库名称。同时检查你的主机地址是否正确,默认是本地数据库时,主机地址填 localhost 。

如果你运行这段代码后还是有错误,你可以把错误信息贴出来,这样可以更好的帮助你定位问题。
小甲鱼最新课程 -> https://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()

这个是连接的代码,错误信息软件也没显示。
小甲鱼最新课程 -> https://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
用这段代码报这个错
小甲鱼最新课程 -> https://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 参数来实现这一点。

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

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

  11.     cursor = db.cursor()

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

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

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

  25. finally:
  26.     if 'db' in locals() or 'db' in globals():
  27.         if db.is_connected():
  28.             cursor.close()
  29.             db.close()
  30.             print("数据库连接已关闭。")
复制代码

这段代码添加了一个 ssl_disabled="True" 参数来显式地禁用SSL连接。同时,也增加了一个检查 db 是否定义的判断,防止在 db 未定义的情况下执行 db.is_connected() 引起 NameError 。

希望这可以帮助你解决问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

成功了。感谢感谢
那这样写的话删除和修改的代码应该怎么写呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

删除
  1. try:
  2.     sql = "DELETE FROM characters WHERE name = 'asd'"
  3.     cursor.execute(sql)
  4.     db.commit()
  5.     print("删除成功!")
  6. except mysql.connector.Error as error:
  7.     print("删除失败,错误信息:{}".format(error))
复制代码


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


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

  1. import pymysql

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

  11.     cursor = db.cursor()

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

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

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

  25. finally:
  26.     cursor.close()
  27.     db.close()
  28.     print("数据库连接已关闭。")
复制代码

这个代码中,我增加了一个 ssl 参数,设置了一个空的SSL上下文来禁用SSL连接。注意,使用 pymysql 库时,数据库的参数名应该是 db 而不是 database 。

以上代码仅供参考,你需要根据实际情况进行修改。如果出现问题,可以查看错误信息来进行调试。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 18:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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