update userinfo set birthday=
"
2012-01-03
"
where name=
"
whw
"
;
select name,age,birthday
from
userinfo where name=
"
whw
"
;
结果如下:
使用pymysql往数据库中插入datetime类型的数据(注意空数据的写法)
import pymysql
#连接数据库 —— 注意这里password得写成字符串类型!!!
conn = pymysql.connect(host='localhost',port=3306,user='root',password='123',database='test',charset='utf8')
#获取光标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #返回的是一个含有多个字典的列表
#添加数据
try:
sql1 = "insert into userinfo(name,age,birthday) values(%s,%s,%s)"
# 支持字符串类型的日期数插入数据库的datetime类型的字段
cursor.execute(sql1,["wanghw",3,"2017-09-09"])
# 如果插入datetime类型的数据为空的话,格式是(None)
sql2 = "insert into userinfo(name,age,birthday) values(%s,%s,%s)"
cursor.execute(sql2,["whh",5,(None)])
except Exception as e:
conn.rollback()
cursor.close()
conn.close()
print(f"事物执行失败{e}")
else:
conn.commit()
cursor.close()
conn.close()
print(f"事物执行成功!}")
结果如下:
MySQL5.6的group by查询
我们使用group by查询一下里面的数据 ——
注意select后面的name字段既没放在聚合函数中也不是group by的字段!
MySQL5.7的sql_mode=only_full_group_by的一个问题
由于本地测试机的MySQL的版本是5.6的,5.7版本在别的地方测试一下。
这回我们来看一下MySQL5.7版本的sql_mode:
可以看到:MySQL5.7版本默认情况下设置了多项sql_mode,我们今天来看一下ONLY_FULL_GROUP_BY这个的影响。
然后我们在MySQL5.7中测试一下
既不在聚合函数中也不是分组字段的group by的查询:
可以看到,在MySQL5.7下这样的查询报错了,原因就是MySQL5.7默认设置了:
sql_mode=only_full_group_by。
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在group by后面出现否则就会报错,或者这个字段出现在聚合函数里面。
我们把上面的loginname加在聚合函数里面就好了:
解决的方法可以参考下面这几篇博客:
https://blog.csdn.net/yalishadaa/article/details/72861737
https://blog.csdn.net/weixin_43064185/article/details/99646535