python pymysql 执行比较时间的sql语句,在mysql中可以顺了执行,但是在python中执行为何报错?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python pymysql 执行比较时间的sql语句,在mysql中可以顺了执行,但是在python中执行为何报错?相关的知识,希望对你有一定的参考价值。

python版本:3.5 mysql 版本:5.6
python pymysql 执行比较时间的sql语句,在mysql中可以顺了执行,但是在python中执行报错;
数据库表为考勤打机中导出的考勤数据,根据工号筛选出迟到及早退人员;
在数据库中筛选出时间在7:30:00之后以及在17:30:00之前打卡的;
以下为sql语句:
select * from kaoqinjilu WHERE gonghao = 6063 and date_format(datatime,'%Y-%m-%d %H:%i:%s')>DATE_ADD(date_format(datatime,'%Y-%m-%d'),INTERVAL "7:30:00" HOUR_SECOND)
and date_format(datatime,'%Y-%m-%d %H:%i:%s')<DATE_ADD(date_format(datatime,'%Y-%m-%d'),INTERVAL "17:30:00" HOUR_SECOND);
python代码:

import pymysql.cursors
#连接数据库
connect = pymysql.connect(host='127.0.0.1',port=3306, user='root', passwd='111111', db='test',charset='utf8',)
#获取游标
cursor = connect.cursor()

sql = "select * from kaoqinjilu WHERE gonghao = 6063 AND date_format(datatime,'%%Y-%%m-%%d %%H:%%i:%%s')>DATE_ADD(date_format(datatime,'%%Y-%%m-%%d'),INTERVAL '7:30:00' HOUR_SECOND)
and date_format(datatime,'%%Y-%%m-%%d %%H:%%i:%%s')<DATE_ADD(date_format(datatime,'%%Y-%%m-%%d'),INTERVAL '17:30:00' HOUR_SECOND)"
cursor.execute(sql)

#提交
connect.commit()

for row in cursor.fetchall():
print(row)
print('迟到早退人数',cursor.rowcount)
报错信息:
C:UsersgsdAppDataLocalProgramsPythonPython35python.exe F:/100lainxiti/考勤查询.py
File "F:/100lainxiti/考勤查询.py", line 7

sql = "select * from kaoqinjilu WHERE gonghao = 6063 AND date_format(datatime,'%%Y-%%m-%%d %%H:%%i:%%s')>DATE_ADD(date_format(datatime,'%%Y-%%m-%%d'),INTERVAL '7:30:00' HOUR_SECOND)
^
SyntaxError: EOL while scanning string literal

Process finished with exit code 1

你上面的sql如果换行写的话,你试试看用三个点括起来,像
sql = '''XXX
XXX'''
看看是不是这个问题导致的。
参考技术A 把引号换成三引号就好了sql = '''select *...'''追问

sql语句整成一行之后又抛出这个错误:: Warning: (1292, "Incorrect datetime value: '%Y-%m-%d'") result = self._query(query)
还是得不到查询结果。。。。

Python pymysql模块

1.pymysql使用步骤
核心类Connect链接用 和 Cursor读写用
1.与数据库服务器建立链接
2.获取游标对象(用户发送和接收数据)
3.用游标执行sql语句
4.使用fetch方法来获取执行的结果
5.关闭链接 先关游标 再关链接

2.游标的常用方法
1.创建游标 conn.cursor(指定查询结果的数据类型)
2.excute 执行sql
3.fetchone(当sql只有一条记录时) many(sql有多条并且需要指定条数) all(多条)
4.scroll 用于修改游标的当前位置

注意:pymysql默认不提交修改,但是注意(指的是对表中记录的操作不提交) 像删库、删表、是无法撤销的
# 导入pymysql模块
import pymysql

# 创建链接得到一个链接对象
conn = pymysql.Connect(
    host="localhost",  # 数据库服务器主机地址
    user="root",  # 用户名
    password="123",  # 密码
    database="db1",  # 数据库名称
    port=3306,  # 端口号 可选
    charset="utf8",  # 编码 可选
)

# 获取游标对象  pymysql.cursors.DictCursor指定返回的结果类型为字典,默认是元组类型
cursor = conn.cursor(pymysql.cursors.DictCursor)

# 查询数据
sql = "SELECT * FROM emp;"

# 执行sql 如果是SELECT语句返回的是查询的条数
res = cursor.execute(sql)

# scroll移动
# cursor.scroll(1, mode = ‘relative‘)    #相对当前位置移动
# cursor.scroll(1, mode = ‘absolute‘)    #绝对位置移动

# 获取查询的结果
# print(cursor.fetchone())      #一次拿一条结果
# print(cursor.fetchmany(1))    #指定拿几条,如果下一行有fetchall则从当前光标开始往后拿
# print(cursor.fetchall())      #查看所有的结果

# 关闭链接
cursor.close()
conn.close()

 

 
 

以上是关于python pymysql 执行比较时间的sql语句,在mysql中可以顺了执行,但是在python中执行为何报错?的主要内容,如果未能解决你的问题,请参考以下文章

Python学习第113天(pymysql模块)

Python pymysql模块

第三篇 Python关于mysql的API--pymysql模块

python的pymysql中以表名作为变量传递进查询语句中

pymysql:python操作mysql

pymysql模块