python:pymsql插入优化

摘要

刚接触scrapy时候,需要把item经过pipelines处理后插入到mysql,写插入语句教程是将item数据一个个枚举出来,在字段特别多的时候还是蛮麻烦的,而且可扩展性比较差,其实只要稍作封装就能很好的解决这种尴尬

import pymysql
from datetime import datetime


class MyPyMysql(object):
    def __init__(self, user, passwd, db, host='localhost', port=3306, use_unicode=True):
        self.host = host
        self.port = port
        self.user = user
        self.passwd = passwd
        self.db = db
        self.connect = pymysql.connect(host=self.host, port=self.port, db=self.db, user=self.user, passwd=self.passwd,
                                       use_unicode=True)
        self.cursor = self.connect.cursor()
    
    def insert(self, table_name, kwargs):
        sql = 'insert into {} ({}) VALUES  {};'.format(table_name, ','.join(list(kwargs.keys())),
                                                       tuple(kwargs.values()))
        self.query(sql)
        '''
        success excute insert into student (id,name,age,birthData) VALUES  (12, 'dalex', 20, '2018-03-15 14:32:35.271451');
        success excute insert into student (id,name,age,birthData) VALUES  (23, 'balex', 20, '2018-03-15 14:32:35.271451');
        '''
        print('success excute {}'.format(sql))
    
    def query(self, sql):
        self.cursor.execute(sql)
        self.connect.commit()
    
    def close(self):
        self.cursor.close()
        self.connect.close()


if __name__ == "__main__":
    me = MyPyMysql('root', 'root', 'blog')
    birthData = str(datetime.now())
    me.insert('student', {'id': 12, 'name': 'dalex', 'age': 20, 'birthData': birthData})
    me.insert('student', {'id': 23, 'name': 'balex', 'age': 20, 'birthData': birthData})
    me.close()

日期格式化

由于对日期函数不是很熟悉,插入日期格式不对导致插入失败,后来查了下相关文档,清楚了很多

1、由日期格式转化为字符串格式的函数为: datetime.datetime.strftime()
2、由字符串格式转化为日期格式的函数为: datetime.datetime.strptime()

    from datetime import datetime
    print(datetime.now().strftime('%Y-%m-%d'))
    print(datetime.strptime('2018-03-15 15:32:24', '%Y-%m-%d %H:%M:%S'))
    '''
    输出结果为:
    2018-03-15
    2018-03-15 15:32:24
    '''
    #格式化时间相操作
    # %a 星期的简写。如 星期三为Web  
    # %A 星期的全写。如 星期三为Wednesday  
    # %b 月份的简写。如4月份为Apr  
    # %B月份的全写。如4月份为April   
    # %c:  日期时间的字符串表示。(如: 04/07/10 10:43:39)  
    # %d:  日在这个月中的天数(是这个月的第几天)  
    # %f:  微秒(范围[0,999999])  
    # %H:  小时(24小时制,[0, 23])  
    # %I:  小时(12小时制,[0, 11])  
    # %j:  日在年中的天数 [001,366](是当年的第几天)  
    # %m:  月份([01,12])  
    # %M:  分钟([00,59])  
    # %p:  AM或者PM  
    # %S:  秒(范围为[00,61],为什么不是[00, 59],参考python手册~_~)  
    # %U:  周在当年的周数当年的第几周),星期天作为周的第一天  
    # %w:  今天在这周的天数,范围为[0, 6],6表示星期天  
    # %W:  周在当年的周数(是当年的第几周),星期一作为周的第一天  
    # %x:  日期字符串(如:04/07/10)  
    # %X:  时间字符串(如:10:43:39)  
    # %y:  2个数字表示的年份  
    # %Y:  4个数字表示的年份  
    # %z:  与utc时间的间隔 (如果是本地时间,返回空字符串)  
    # %Z:  时区名称(如果是本地时间,返回空字符串)  
    # %%:  %% => %  

引用

1,python中datetime模块中strftime/strptime函数
2,pymsql github 源码

    原文作者:Geekrun
    原文地址: https://segmentfault.com/a/1190000013755824
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞