美文网首页
python操作mysql表insert时datetime类型遇

python操作mysql表insert时datetime类型遇

作者: 冒险小A | 来源:发表于2018-08-08 22:14 被阅读0次

今天操作数据库的时候,不管怎么样运行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方法!

相关文章

网友评论

      本文标题:python操作mysql表insert时datetime类型遇

      本文链接:https://www.haomeiwen.com/subject/decfbftx.html