今天操作数据库的时候,不管怎么样运行python程序,数据表的内容都不会insert,而且也没有丝毫报错!!!
经过手动debug(因为只用了gedit编辑器),把每一个部分屏蔽掉,当发现把sql语句中的datetime这段注释掉后,即可以正常insert了,太坑了!!!查询python的sql语言规范时,发现datetime需要转换变量类型!!!!
mysql中datetime类型字段,赋值时要用str_to_date函数转化成mysql的datetime类型!
正确语法 : sql = "INSERT into tablename(datetime) values(str_to_date(\'%s\','%%Y-%%m-%%d %%H:%%i:%%s'))" %(xxxx-xx-xx xx:xx:xx)
后面的这些xx就是要传入的datetime类型的参数了.
以下是 [ 调用face++接口的人脸识别,并将数据存入到数据库 ] 代码
# coding=utf-8
# face++ 人脸识别detect部分
import requests
import base64
import json
import MySQLdb
#=============转化为base64函数=============
def file_base64(file_name):
with open(file_name, 'rb') as fin:
file_data = fin.read()
base64_data = base64.b64encode(file_data)
return base64_data
#===============表情识别部分===============
def post_pic(name,datetime,base64):
postData = {
'api_key': 'mTtHExxxxxxxxxxxxxxxxxxxxr5wuG',
'api_secret': 'uo3xxxxxxxxxxxxxxxxxxTJeb5',
'image_base64': base64,
'return_attributes' : 'emotion'
}
back = requests.post(url, data = postData)
jres = json.loads(back.text)
#emotion各可能性
info = jres['faces'][0]['attributes']['emotion']
anger = info['anger']
disgust = info['disgust']
fear = info['fear']
happiness = info['happiness']
neutral = info['neutral']
sadness = info['sadness']
surprise = info['surprise']
emotion_arr = [anger,disgust,fear,happiness,neutral,sadness,surprise]
emotion_name = ['愤怒','厌恶','恐惧','高兴','平静','伤心','惊讶']
emotion = emotion_name[emotion_arr.index(max(emotion_arr))]
print emotion
insertDB(name,datetime,emotion)
#==============存入数据库部分===============
#这里参数全是字符串类型
def insertDB(name,datatime,emotion):
# 打开数据库连接
db = MySQLdb.connect("localhost", "admin", "password", "face", charset='utf8' )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 插入语句
sql = "INSERT INTO tb_emotion (name,datetime,emotion) VALUES ('%s',str_to_date(\'%s\','%%Y-%%m-%%d %%H:%%i:%%s'),'%s')" % (name,datatime,emotion)
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 出现错误 就回滚
db.rollback()
# 关闭数据库连接
cursor.close()
db.close()
#========执行操作============
if __name__=="__main__":
url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'
image_1 = file_base64('/home/dashuaibi/图片/1.jpg')
post_pic('小A','2018-8-8 19:09:55',image_1)
总结:
- 脚本语言报错机制有丶小坑!
- python中操作mysql特殊类型需要注意
- 就算是在linux中打代码还是要用ide的 , 纯文本打代码还是太累
- print是世界上最好的debug方法!
网友评论