python3中sql语句参数为中文,查询时结果为空!!!

zjxmzs 2017-09-13 05:58:02

import pymssql
conn = pymssql.connect(host ="157.14.0.1",database ="",user="sa",password="gzs1231",charset="GBK")
cur_jrrk = conn.cursor()
cur_jrrk.execute('SELECT COUNT(*) from ZTB_UserInfo where DATEDIFF(d, GETDATE(), ShenheDate) = 0 and Locked =%s','开启'.encode('gbk'))
jrrk = cur_jrrk.fetchall()
conn.close()
print(jrrk)

"""环境python3,sqlervr2012的编码是GBK
语句在企业管理器中执行有数据,但放到execute里执行时结果为0。
这个是打印的结果 [(0,)]
如果where后的条件是数字或者英文,显示的查询结果就是正常的。"""
cur_jrrk.execute('SELECT COUNT(*) from ZTB_UserInfo where DATEDIFF(d, GETDATE(), ShenheDate) = 0 and id =%s','123w'.encode('gbk'))
#这样查询是正常的,求解!!

补充下,通过sql跟踪,发现执行的语句是SELECT COUNT(*) from ZTB_UserInfo where DATEDIFF(d, GETDATE(), ShenheDate) = 0 and Locked =0xbfaac6f4,'开启'条件变成'0xbfaac6f4'.应该是编码的问题。不知道怎么处理了。
...全文
853 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjxmzs 2017-09-14
  • 打赏
  • 举报
回复
谢了,已解决。通过排除,查询字段为varchar时是正常的,Locked这个字段是nvarchar。所以通过修改查询语句后解决了。 修改后的语句:
cur_jrrk.execute('SELECT COUNT(*) from ZTB_UserInfo where DATEDIFF(d, GETDATE(), ShenheDate) = 0 and convert(varchar(10),Locked) =%s','开启'.encode('gbk'))
sanGuo_uu 2017-09-14
  • 打赏
  • 举报
回复
执行
# -*- coding: utf-8 -*-

print('开启'.encode('gbk'))
print('123w'.encode('gbk'))
结果
b'\xbf\xaa\xc6\xf4'
b'123w'
所以,把encode去了能执行么

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧