ZXPoo 发表于 2023-7-5 17:30:23

python连接mysql

# 查询语句
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和数据库已经连接上了,但是后面的增删改查语句都报错,不知道是代码问题还是什么。求大佬指点{:10_254:}

陶远航 发表于 2023-7-5 17:30:33

问题:Python连接MySQL后执行查询和插入语句时报错,想知道是代码问题还是其他原因。

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

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

您可以按照以上几点逐一检查代码,看看是否能解决报错问题。如果还有其他问题,请提供具体的错误信息,以便更好地帮助您解决问题。

isdkz 发表于 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 。

如果你运行这段代码后还是有错误,你可以把错误信息贴出来,这样可以更好的帮助你定位问题。

ZXPoo 发表于 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()

这个是连接的代码,错误信息软件也没显示。

ZXPoo 发表于 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 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
用这段代码报这个错

isdkz 发表于 2023-7-5 18:04:11

ZXPoo 发表于 2023-7-5 18:02
操作失败,错误信息:2055: Lost connection to MySQL server at 'localhost:3306', system error: 1

你的错误信息中表示“丢失了与MySQL服务器在'localhost:3306'的连接,系统错误: 1 没有可用的密码(_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 。

希望这可以帮助你解决问题。

ZXPoo 发表于 2023-7-5 18:16:30

isdkz 发表于 2023-7-5 18:04
你的错误信息中表示“丢失了与MySQL服务器在'localhost:3306'的连接,系统错误: 1

成功了。感谢感谢{:5_106:}
那这样写的话删除和修改的代码应该怎么写呢?

isdkz 发表于 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 。

以上代码仅供参考,你需要根据实际情况进行修改。如果出现问题,可以查看错误信息来进行调试。

ZXPoo 发表于 2023-7-5 18:45:20

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

非常感谢{:10_281:}
页: [1]
查看完整版本: python连接mysql