如何在SQL语句中传入正确的数据类型?——python3.6, pymysql

很奇怪的一个问题

我想用python3.6中的pymysql包将数据传入到MySQL中, 数据库中的表的类型分别是(简略):

nick_name VARCHAR(...),
content VARCHAR(...),
time DATETIME,
num_like INT,
num_forward INT,
num_comment INT,

于是有了如下语句:

sql_insert = "INSERT INTO `post` (`nick_name`, content`, `time`, `num_like`, `num_forward`, `num_comment`) VALUES (%s, %s, %s, %d, %d, %d)"
cursor.execute(sql_insert, ('Jack', 'Wow!', '2017-11-17 11:20', 20, 30, 30))


当然,在编译过程中遇到了如下错误:

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

于是我谷歌了一番,在stackoverflow上,有个大神给出了答案

The format string is not really a normal Python format string. You must always use %s for all fields.

意思是在SQL里,不能用%d,要换成%s.

后来,我在pymysql文档中也找到了相似的解答。于是,我将代码修改成:

sql_insert = "INSERT INTO `post` (`nick_name`, content`, `time`, `num_like`, `num_forward`, `num_comment`) VALUES (%s. %s, %s, %s, %s, %s)"

但是,又报了如下错误:

pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`, `time`, `num_like`, `num_forward`, `num_comment`) \n VALUES ('Jack'. 'W' at line 2")

这一次,我找不到答案了。因为好像很少有人到这一步还出错的……

求各位大神解答……

3个回答

sql_insert = "INSERT INTO post (nick_name, content,time,num_like,num_forward,num_comment`) VALUES (%s, %s, %s, %s, %s, %s)"
全都使用%s,而且第一个%s后面你不是写的逗号

ranyixu11
doggy_coder 该有的`符号还是不变,,我发的时候加了的,不知道发出去怎么就没了
接近 2 年之前 回复

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

这句的意思是,%d 占位符,需要一个数字,而不是字符串。

如果你用不了%s或者有问题,可以试一下,先用下面这种方式:

sql_insert = "INSERT INTO post (nick_name, content,time,num_like,num_forward,num_comment) VALUES ("+xx+", "+xx+", "+xx+", "+xx+","+xx+","+xx+")

看看这种方式.

你的SQL报错,显示成下面这样了:看不清具体错误

pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to

dcxy0
Q544471255 回复ranyixu11: 我知道,先试用一下,没问题在改成占位符不就可以了
接近 2 年之前 回复
ranyixu11
doggy_coder 不建议sql拼接,编程中使用sql拼接是个不好的习惯,因为可能发生sql注入。如果要拼接,也最好要进行参数转义。
接近 2 年之前 回复

把表字段全改成varchar,写入完再改回来。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何在SQL的UPDATE语句中正确使用ISNULL函数
下列语句该怎么修改,我想把ADDRESS中有NULL标记的记录用空格取代,怎么写rnUPDATE CLIENT SET ADDRESS='' WHERE ISNULL('ADDRESS')=TRUE
SQL语句中数据类型的问题
在创建表是如果数据比较小 可以定义成INT类型,rn如果数据更大一些呢,可以定义成哪些类型?rnLONG??rn谢谢了
如何在SQL语句中使用常量
我要在SQL语句中查询Q_NO='99999'我的语法如下:rnADOQuery.SQL.Add('select * from student where q_no=99999');rn在编译时出错,如何处理?
如何在sql语句中使用变量?
sFilterStr = InputBox("输入过滤器表达式:")rn strsql = "PAMAMETERS sFilterStr Currency; Select 表1.TEL_NUM,表1.OPERATOR From 表1 Where 表1.TEL_NUM =" & sFilterStr rn Data1.RecordSource = strsqlrn 以上简单代码运行有错。
如何在SQL语句中引入变量
<%rndim arna=10rnSet conn=Server.Createobject("Adodb.connection")rnconn.open "dsn=data"rnsqltext = "update dis_lev1 set part_requan=part_quan/a"rnconn.execute(sqltext)rn%>rnrnrn用的我新手,用的是ASP+ACCESS rn其中a就是想在更新书库库的变量,该怎么处理呢,,把变量A换成具体的值都能过.谢谢
如何在SQL语句中使用变量?
我的问题如下,编辑框CString变量m_str,字符数组test,strcpy(test,m_str.mid(n,m)),然后int i=atoi(test);要求i是下面查询语句的条件变量 rnm_pRecordset->Open("SELECT * FROM demotable WHERE zonenum= ")rn如何处理?
如何在SQL语句中做循环?
如何在SQL语句中做循环?
如何在SQL语句中运用变量?
我想在sql语句中用变量,改如何用?rn如:rn char name[10];rn "select * from school where studentname = ??name"rn
请教如何在SQL语句中循环
有一个员工资料表如下:rnrn员工编号 姓名 正式员工 转正日期 ....rn001 张三 是 2008-11-09rn002 李四 否 2008-11-09rn003 王五 否 2008-11-19rn004 张六 否 2008-11-19rn005 李云 否 2008-11-08rn.rn.rn.rn1、我需要循环这个表,然后判断这个员工是否为正式员工,如果否,然后再判断转正日期是不是今天或今天以前,如果满足这两个条件,就将这条数据写到另一个表中rn 1)循环表中所有的数据rn 2)判断正式员工为否,转正日期等于今天或小于今天rn 3)将这条数据的员工编号,姓名两列写到另一个表中rn rn2、以上操作在一个存储过程中实现rnrn请问以上要求怎么实现?rnrn我现在是先建一个变量,然后查询所有数据,用count函数取得总记录数保存在这个变量中,但我不会一条条往下面判断,请各位帮忙。
如何在sql语句中执行存储过程?
比如:rn有一个存储过程的名称是:abc(@tbl nvarchar(255),@sid int,@cateid nvarchar(255)),有三个参数要传入。rn现在sql语句是:rnselect * from infornorder by abc('info',sid,cateid)rn大致意思是这个,abc就是执行order功能的,
如何在SQL语句中插入字符" ' "?
如何在SQL语句中插入字符" ' "?
如何在sql语句中屏蔽关键字
如:insert into 表名(a,b,c)values(''',"fdsa","fdas")rn表中第一列插入一个"'",可在 sql sever 2000 中"'"也是关键字了
如何在SQL 语句中加入参数?
SQL SERVER 例子:SELECT CategoryID, CategoryName, Description rnFROM Categories rnWHERE (CategoryID = @categoryid)rn但这个例子在ORACLE中好象不行!能不能帮我写一个在ORACLE加入参数据的例子?rn谢谢!!!!rn
如何在sql语句中获取时间值????
Insert into ST_@Hour(yy,mm,dd,hh,Time) values('','','','','')rn插入语句在sql中如何获取当前的年,月,日,小时与当前时间:values('','','','','')rnrn请各位大哥帮我写写!小弟谢谢各位了!
如何在sql语句中使用自定义函数?
set rs = server.CreateObject ("Adodb.recordset")rnsql="select * from News_artcle where sid="&sidrnrnsql=sql&" and getJD(adate)=1"rnrs.open sql,1,1rnrnrnFunction getJD(cmonth) '季度函数::自定义函数rnselect case month(cmonth)rn case 1,2,3rn getJD=1rn case 4,5,6rn getJD=2rn case 7,8,9rn getJD=3rn case 10,11,12rn getJD=4rnend selectrnend functionrnrn运行提示错误:rnMicrosoft JET Database Engine 错误 '80040e14' rnrn表达式中 'getJD' 函数未定义。 rn
如何在SQL语句中引用变量???
我写了这样一句:rnm_ado.SetRecordSource("select * from 表名 where Grade=变量");rn假设变量值是edit控件中的内容,那么上面这句具体应该怎么写?rn另外,请问如何取得一个edit控件的text属性值?我为这个edit控件绑定了一个Control类型的变量
如何在SQL语句中使用变量
_bstr_t strConnect="Provider=SQLOLEDB.1;Persist Security Info=TRUE;User ID=sa;Password= 000000 ;Initial Catalog= rmbfj ;Data Source= 192.168.1.65";rnrn比如我想把这里的 IP 地址改成一个 变量,这个变量是要从 ACCESS 中读取出来, 应该是什么类型的?rnrn还有 我想把一个变量的值 写进数据库rnrnstrSQL.Format("INSERT INTO UpedInfo ( SubName ) values ('"+uploadinfo.SubName+"')");rnm_pSQLRecordset=m_pSQLConnection->Execute((_bstr_t)strSQL,&RecordsAffected,adCmdText); rnrn其中:uploadinfo.SubName 是一个变量。也是从 ACCESS 中读取出来的。我这么写的结果 是 VS2008 报错说 “+”不能添加两个指针。rnrn请这里问应该怎么写。
如何在sql语句中添加统计
如何在sql语句中添加统计列,如下显示效果rn借款余额这个列是不存在表中的rnrn交易日期 交易金额 借款余额rn2012-1-4 1000 1000rn2012-1-4 2000 3000rn2012-1-4 2000 5000rn2012-1-4 2000 7000rn2012-1-4 1000 8000rn2012-1-10 -6000 2000rn2012-1-10 -1000 1000
如何在sql语句中格式化时间
我在发布新闻的时候,时间是取的 DateTime.Now存入字段CreateTime,当我查询的时候,我希望查出的CreateTime能格式化成下面的"yyyy-MM-dd"格式rnrnstring nowTime = DateTime.Now.ToString("yyyy - MM - dd");rn rnstring sqlCivilNewsCount = "select count(*) from NewsInfo where CategoryId=1 and CreateTime like '%" + nowTime + "%'";这句中的CreateTime如何能转成yyyy-MM-dd格式
如何在sql语句中实现变量?
我常要执行这样一类sql语句rnselect * from tableA where date='20003-6-30'rnunion allrnselect * from tableB where date='20003-6-30'rnunion allrnselect * from tableC where date='20003-6-30'rnunion allrnselect * from tableD where date='20003-6-30'rnrn可不可以将其中的'2003-6-30'设成一个变量代替,这样在执行sql语名前我只需更改变量的值即可rn谢谢rnrnrn
如何在sql语句中加上字符串???
有表rnid a b crn1 按面积计算 7 0 rn2 标准摊位 0 7rnrn用如下sql:rnselect id,case when a='按面积计算' then b else c end d from departmentrnrn想得到如下结果:rnrnid drn1 7个rn2 7平方米rnrnrn如何加上"个"或"平方米"???
如何在sql语句中加上引号?
JSP:rnrnString sql="INSERT INTO DAYTYPES VALUES (" + request.getParameter("dtype");rn如何给request.getParameter("dtype")的值加上引号?rnrn另外,if语句的多个条件如何并在一起,是用and 吗?还是&&?
如何在SQL语句中加入单引号(')
如题!
如何在sql语句中设置判断
一个查询表,如果登陆用户 username in (a,b,c)则查询全表 否则 加上where name = usernamernselect * from user_info ;rnselect * from user_info where name =
如何在sql语句中实现递归查询?
我有两张表:rn人员表man:rnmancode //人员编码rnmanname //人员姓名rndeptcode //所属部门编码rnrn部门表dept:rndeptcode //部门编码rndeptname //部门名称rnparentdeptcode //上级部门编码rnrn在dept表中通过parentdeptcode(上级部门编码)实现单位的所属关系和层次划分,rn假设有部门的层次如下:rnrn部门arn 部门a1rn 部门a11rn 部门a12rn 部门a13rn 部门a2rn 部门a21rn 部门a211rn 部门a22rn 部门a23rn部门brnrnrn我现在想查询部门a中的所有人员如何在一个sql语句中查出来?
如何在sql语句中进行类型转换?
我打算将数据表中的一个varchar(32)型的字段的后三位转化为int型,存入同一表的另一个int型字段中,sql语句应该如何写?rnvarchar型格式如下:rn“220KV莱红线#116”,取116存入另一个表
在SQL语句中转换数据类型的问题
sql_str = "select (Convert(bigint,Goods.pno)) as pno, title from Goods INNER JOIN GoodsRecord on Goods.pno = GoodsRecord.pno WHERE Goods.pno in (20112011,20112012)";rnrnrn错误提示:转换 nvarchar 值 '4020002810' 时溢出了整数列。超过了其中最大的整数值。
如何在SQL语句中嵌入SQL语句
比如rnsql="select * from .."rnset rs=db.execute(sql)rnDo while Not rs.Eofrnrn在这里加入一个删除数据的语句,但是无法执行,这个问题已经困扰我很久的,一直没有解决,有没有人能够帮我解决下,谢谢rnrnrs.MoveNextrnLoop
sql语句中的like语句中%和*的区别?
sysuser中有两个用户名,system和sysaudit,想通过like子句查询以sys开头的用户名,但是rnselect * from sysuser a where a.login_name like 'sys%';可以查出记录rnselect * from sysuser a where a.login_name like 'sys*';无法查出记录rn这是为什么啊?
如何在if结构语句中进行代码优化
请问如何在VBSCRIPT语句中插入图片
请问如何在VBscript语句中插入图片rn如rn rn是错误的
请问:如何在Select 语句中使用“in”
我的语句:select var1 into :ls_var1 from table1 where var2 in (aa,bb,cc);rn这样就可以通过.aa,bb,cc是字符rn如果把(aa,bb,cc)换成字符串变量,就不能执行。rn请问如何处理?rnrn
如何在select语句中执行存储过程
我要在一个新的存储过程的SELECT中调用已经写好的存储过程,利用原来存储过程的输出值判断要输出的列的内容,请问怎么写呀?rnrnEXEC Get_IsCompletedTest C.ID,B.Label,0,@CompletedTest OUTPUTrnrnIF (UPPER(@CompletedTest) = 'TRUE')rn SET @Status = 'COMPLETE'rn ELSErn SET @Status = 'NO COMPLETE'rnrn上面的代码怎么写到底下的SELECT语句中呀??rnrnSELECT C.[ID],ISNULL(C.LastName,'') + ' ' + ISNULL(C.FirstName,'') [Name],C.MembershipNum,rn B.Label TestID,B.ExtraInfo SubscriptionType,@Status [Status]rn FROM Subscription_Access AS A WITH (NOLOCK),Subscription AS B,Learner AS Crn WHERE A.StartDate > '01/01/2004' AND A.StartDate < '02/05/2005' AND C.[ID] = A.LearnerID AND B.[ID] = A.Subscription_PriceID AND A.IsAdminData = 0rn ORDER BY ISNULL(C.LastName,'') + ' ' + ISNULL(C.FirstName,'')
如何在js语句中加入HTML
如何在JS语句中加入HTML语句,例如:控制显示内容的大小、颜色
如何在from语句中使用表变量?
请问在sql server的存储过程编辑器中,from语句能否使用变量,该变量指定表。调用该存储过程时动态传递表名,然后返回表的所有记录。rn若能使用变量,那使用的格式是什么?谢谢。rn
如何在select语句中增加行号
如select c1,c2,c3 from table1rn我想在语句中增加一个行号,如select 行号,c1,c2,c3 from table1rn但‘行号’不是table1中的列,它要显示1,2,3,4,5,6....,请问如何实现,有这个函数吗?rn
如何在select 语句中引用变量?
如:rnset @i = 'xb = 1'rnselect @j = count(*) from t1 where @irn有语法错误? 该怎么用?
如何在语句中直接引用字符串?
我发现我不能在语句中直接引用字符串。但是其他类型的可以直接引用rn比如rnrn update kkkrn set kkk.f1=1,kkk.f2="test"rn using sqlca;rnrn这里f1是数字型字段,f2是字符型字段。这个语句就会报错。rn现在凡是语句中要用到字符串的地方,我都得定义个字符串变量来引用。rn我是这样写:rnrn string ls_f2rn ls_f2="test"rn update kkkrn set kkk.f1=1,kkk.f2=:ls_f2 rn using sqlca; rn有比较的地方也得定义变量rn 比如:rn string ls_strrn ls_str="test"rn select from kkkrn where kkk.f2=:ls_strrn using sqlca;rnrn这样很麻烦啊。很痛苦!rn我觉得象字符串这么常用的类型,不应该用起来这么麻烦吧?是不是有别的办法?请赐教!rnrn另外,那个给分,缺省是20,我改成100,有什么效果吗?是不是我的得分多些?rn
如何在ASP语句中定时调用函数?
如何在ASP语句中定时调用函数?rn写在<% %>中。
如何在in语句中使用自定义排序
rncreate table Arn(rn id indentity(1,1)rnrn num intrn)rnrnselect * from A where id in(3,1,2)rnrn问题,我希望结果是按3,1,2来进行排序显示,但是默认是根据id排序显示的,即实际显示结果是安1,2,3显示的rnrn怎么做到我要的效果,请高手帮忙,谢谢rn
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件