解决python mysql插入数据时报错:TypeError: %d format: a number is required, not str

今天在使用python爬取数据并将其写入mysql数据库时,使用该如下语句:

       cursor.execute(
                    "insert into comments_p_spider(owner_id,from_name,content,create_time,score,comment_level) values(%d,%s,%s,%s,%f,%s)",
                    (p_id,str(username), str(contentStr), str(create_time),float(score), str(comment_level)))
            conn.commit()

  

报错如下:

TypeError: %d format: a number is required, not str

解决方案:The format string is not really a normal Python format string. Youmust always use %s for all fields.

也就是MySQLdb的字符串格式化不是标准的python的字符串格式化,应当一直使用%s用于字符串格式化。

所以将代码的sql语句的value格式均改为%s(无论要插入的数据是什么类型),即可正常运行。

        cursor.execute(
                    "insert into comments_p_spider(owner_id,from_name,content,create_time,score,comment_level) values(%s,%s,%s,%s,%s,%s)",
                    (p_id,str(username), str(contentStr), str(create_time),float(score), str(comment_level)))
            conn.commit()

  

原文地址:https://www.cnblogs.com/wang-jx/p/12313854.html

时间: 2024-08-07 15:37:29

解决python mysql插入数据时报错:TypeError: %d format: a number is required, not str的相关文章

python向mysql插入数据一直报TypeError: must be real number,not str

注意,Python向MySQL中写入数据时无论输入的数据类型如何,语句中的占位符均使用%s,例如 这里的price我是int类型的,所以占位符用的%d,后来改成float类型,占位符改为%f,都不可以!!!! 也就是无论输入的数据是否为字符串,占位符都是%s,不存在%f,%d这种概念. 原文地址:https://www.cnblogs.com/qilin20/p/12111218.html

向 mysql 插入汉字时报错 Incorrect string value: '\xE6\x9B\xB9\xE5\x86\xAC...' for col....

Incorrect string value: '\xE6\x9B\xB9\xE5\x86\xAC...' for column 'realname' at row 1 该情况一般是由数据库设计时的编码错误导致的. show variables like 'character%'   查看数据库编码,为latin1. 如果项目正在测试当中,数据不重要的话,一劳永逸的解决办法是,使用 alert database tuanplus character set utf8 更改数据库的编码格式,再重新

Mysql 插入时间时报错Incorrect datetime value: '' for column 'createtime'

在网上找了很多方法总结如下: 1.MySQL驱动版本的问题.这种一般是在mYSQL版本更新了之后才会报错.解决方法在jdbc里添加"&useOldAliasMetadataBehavior=true" 2.可能是datetime的格式问题. datetime 以'YYYY-MM-DD HH:MM:SS'格式检索和显示DATETIME值.支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59'TIMESTAMP值不能早于1970或晚于20

执行python manage.py makemigrations时报错TypeError: __init__() missing 1 required positional argument: 'on_delete'

在执行python manage.py makemigrations时报错: TypeError: __init__() missing 1 required positional argument: 'on_delete' 解决方法: 在连接外键时加上: on_delete=models.CASCADE 执行python manage.py makemigrations时报错TypeError: __init__() missing 1 required positional argument

mysql插入数据 报错[Err] 1136 - Column count doesn't match value count at row 1(表中有自增列)

版本:8.0.16 创建了一张表:create table user_table(uid int primary key auto_increment,uname varchar(10))auto_increment=1 插入数据报错: 经查找 ,有三种方式可以解决这个问题: 1.插入数据得时候,带入列名: insert into user_table("uname") values ("刘一") 2.自增键这列设置为0 insert into user_table

Navicat For MySQL中插入数据时报错1055?

报错信息:  Windows系统的解决方法: (1)在MySQL中查询sql_mode的值,即在查询编辑器中输入:SELECT @@sql_mode;并运行. (2)将查询得到的结果复制,我们可以注意到结果里面有一个ONLY_FULL_GROUP_BY. (3)在MySQL安装目录下找到my.ini文件,以记事本方式打开.找到[mysqld],在下面加入一句话:sql_mode='复制的内容',并将ONLY_FULL_GROUP_BY,删掉. (4)重新启动MySQL服务:我的电脑右键——管理—

在使用json.dumps()格式化响应数据时报错TypeError: Object of type Response is not JSON serializable

今天在处理接口返回数据格式化的时候报错:TypeError: Object of type Response is not JSON serializable.响应的对象不可序列化 解决: 打印出它响应结果是什么类型,发现是个对象. 然后先把响应结果转为json,再去格式化响应内容. 如下: import requests import json url = 'https://api.apishop.net/common/weather/get15DaysWeatherByArea' apike

node mysql插入中文时报错

一开始以为是前端传参.数据类型的问题,于是就直接把sql语句中的参数直接改成字符串值,但发现还是报500错误. 所以,这就排除了前端的问题. 剩下的就是数据库了,发现我的表设置有问题.凡是有中文数据的字段,都得改一下 .下面两个选项,改成如下图: 字符集的值为utf8 排序规则的值为utf8_general_ci 教程结束. 原文地址:https://www.cnblogs.com/Mrrabbit/p/8733365.html

ORA-01843的错误 插入日期数据时报错

当我在SQLPLUS执行 : INSERT INTO customers ( customer_id, first_name, last_name, dob, phone ) VALUES ( 5, 'Doreen', 'Blue', '20-MAY-1970', NULL ); 出现 "ORA-01843: 无效的月份 "这个错误. Google之后找到下面的这篇文章,其中说先执行alter session set nls_date_language='american'  然后再执