python小小白哟 发表于 2023-6-26 18:40:53

python中以字典的数据结构插入mysql数据问题

代码如下:
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:43:36

根据你提供的代码,有几个可能导致数据无法插入数据库的原因:

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

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

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

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

    数据库权限问题:请确保使用的数据库账户具有插入数据的权限。

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

通过这样的修改,你能够获取更具体的错误信息,帮助你排查问题。请尝试运行修改后的代码,并观察终端输出的错误信息。如果有任何其他问题,请随时提问。

isdkz 发表于 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的表,并且该表的结构是否和你提供的数据匹配。如果表不存在,或者表结构不匹配,那么插入操作肯定会失败。

以上只是一些可能的原因,如果你检查了所有这些可能性,仍然无法解决问题,那么你可能需要提供更详细的信息,以便我们能够更好地帮助你。

python小小白哟 发表于 2023-6-26 18:51:52

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

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

Error: (1062, "Duplicate entry '20120001' for key 'PRIMARY'")
原来是id为20120001导致了数据的重复了,已经解决了,非常感谢。

python小小白哟 发表于 2023-6-26 18:54:33

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

主键不能重复 是这个问题

sfqxx 发表于 2023-6-26 19:35:26

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

不客气~{:5_109:}
页: [1]
查看完整版本: python中以字典的数据结构插入mysql数据问题