鱼C论坛

 找回密码
 立即注册
查看: 1568|回复: 6

[已解决]python中以字典的数据结构插入mysql数据问题

[复制链接]
发表于 2023-6-26 18:40:53 | 显示全部楼层 |阅读模式

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

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

x
代码如下:
import pymysql

data = {
    'id': '20120001',
    'name': 'Bob',
    'age': 100
}
db = pymysql.connect(host='xxxx,user='xxxx',password='xxxx',port=3306,db='xxxx')
cursor = db.cursor()
table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
try:
    if cursor.execute(sql, tuple(data.values())):
        print('Successful')
        db.commit()
except:
    print('Failed')
    db.rollback()
db.close()


没有报错,但是数据就是加不到数据库,大神们看看问题出在哪里了。非常感谢。
最佳答案
2023-6-26 18:45:29
根据你提供的代码,无法直接判断问题出在哪里,但有几个可能的原因需要排查:

1. 数据库连接配置:请确保你提供的数据库连接配置是正确的,包括主机名、用户名、密码、端口号以及数据库名称。如果其中有任何一个值不正确,连接数据库就会失败。

2. 表名和字段名:请确保 `table` 和 `keys` 变量包含正确的表名和字段名。如果表名或字段名有拼写错误或不存在,插入操作将失败。

3. 数据类型匹配:请确保数据类型与数据库表中的定义匹配。例如,如果数据表中某个字段的类型为整数,`data` 字典中对应的值也必须是整数。如果数据类型不匹配,插入会失败。

4. 异常处理:目前代码中 `except` 块中只输出了 `'Failed'` ,没有提供更多的信息。可以在 `except` 块中添加更详细的错误信息打印,例如 `print(f'Failed: {str(e)}')`,以便获取更具体的错误信息。

我建议将代码的异常处理修改为以下形式,以便打印出更多的错误信息:
try:
    if cursor.execute(sql, tuple(data.values())):
        print('Successful')
        db.commit()
    else:
        print('Data Insertion Failed')
except Exception as e:
    print(f'Error: {str(e)}')
    db.rollback()

通过这样的修改,你能够获取更具体的错误信息,帮助你排查问题。请尝试运行修改后的代码,并观察终端输出的错误信息。如果有任何其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-26 18:43:36 | 显示全部楼层
根据你提供的代码,有几个可能导致数据无法插入数据库的原因:

    数据库连接信息错误:请确保host、user、password、port和db参数的值正确,并与你的数据库配置匹配。

    数据库表不存在:请确认在数据库中存在名为students的表,如果没有,请先创建该表。

    键和值的数量不匹配:请检查data字典中的键值对数量和表的字段数量是否一致,确保键和值的数量是对应的。

    数据类型不匹配:请检查data字典中的值的数据类型是否和表中各字段的数据类型匹配。如果数据类型不匹配,数据库可能会拒绝插入操作。

    数据库权限问题:请确保使用的数据库账户具有插入数据的权限。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-26 18:45:29 | 显示全部楼层    本楼为最佳答案   
根据你提供的代码,无法直接判断问题出在哪里,但有几个可能的原因需要排查:

1. 数据库连接配置:请确保你提供的数据库连接配置是正确的,包括主机名、用户名、密码、端口号以及数据库名称。如果其中有任何一个值不正确,连接数据库就会失败。

2. 表名和字段名:请确保 `table` 和 `keys` 变量包含正确的表名和字段名。如果表名或字段名有拼写错误或不存在,插入操作将失败。

3. 数据类型匹配:请确保数据类型与数据库表中的定义匹配。例如,如果数据表中某个字段的类型为整数,`data` 字典中对应的值也必须是整数。如果数据类型不匹配,插入会失败。

4. 异常处理:目前代码中 `except` 块中只输出了 `'Failed'` ,没有提供更多的信息。可以在 `except` 块中添加更详细的错误信息打印,例如 `print(f'Failed: {str(e)}')`,以便获取更具体的错误信息。

我建议将代码的异常处理修改为以下形式,以便打印出更多的错误信息:
try:
    if cursor.execute(sql, tuple(data.values())):
        print('Successful')
        db.commit()
    else:
        print('Data Insertion Failed')
except Exception as e:
    print(f'Error: {str(e)}')
    db.rollback()

通过这样的修改,你能够获取更具体的错误信息,帮助你排查问题。请尝试运行修改后的代码,并观察终端输出的错误信息。如果有任何其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-26 18:46:03 | 显示全部楼层
你的代码看起来基本是正确的。但是,如果你在尝试插入数据到 MySQL 数据库时遇到问题,可能是以下几个原因:

1. 数据库连接信息:你可能需要确认你的主机名、用户名、密码、端口和数据库名是否正确。这些都是在你的  pymysql.connect  函数中设置的。

2. 数据库权限问题:你的数据库用户可能没有对数据库的写入权限,你可以尝试使用数据库的 root 用户,或者检查该用户是否有足够的权限进行写操作。

3. 数据问题:你的数据可能与数据库的字段类型不匹配。例如,你可能尝试在一个数字类型的字段中插入字符串类型的数据。请检查  data  字典中的数据类型与数据库中的字段类型是否匹配。

4. SQL问题:你的SQL语句可能有错误。你可以打印你的 SQL 语句,并在 MySQL 命令行工具中执行它,看是否有错误信息。

5. 异常处理:在你的代码中,你使用了  try/except  来处理可能的错误,但你没有打印出错误的详细信息。你可以在  except  块中添加  print  语句来打印错误信息,这样可以帮助你更好地理解出现的问题:
except Exception as e:
    print('Failed')
    print('Error:', e)
    db.rollback()

6. 表的存在性和结构:确认一下数据库中是否真的存在名为  students  的表,并且该表的结构是否和你提供的数据匹配。如果表不存在,或者表结构不匹配,那么插入操作肯定会失败。

以上只是一些可能的原因,如果你检查了所有这些可能性,仍然无法解决问题,那么你可能需要提供更详细的信息,以便我们能够更好地帮助你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-26 18:51:52 | 显示全部楼层
sfqxx 发表于 2023-6-26 18:45
根据你提供的代码,无法直接判断问题出在哪里,但有几个可能的原因需要排查:

1. 数据库连接配置:请确 ...

Error: (1062, "Duplicate entry '20120001' for key 'PRIMARY'")
原来是id为20120001导致了数据的重复了,已经解决了,非常感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-26 18:54:33 | 显示全部楼层
python小小白哟 发表于 2023-6-26 18:51
Error: (1062, "Duplicate entry '20120001' for key 'PRIMARY'")
原来是id为20120001导致了数据的重复 ...

主键不能重复 是这个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-26 19:35:26 | 显示全部楼层
python小小白哟 发表于 2023-6-26 18:51
Error: (1062, "Duplicate entry '20120001' for key 'PRIMARY'")
原来是id为20120001导致了数据的重复 ...

不客气~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 17:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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