摘要
刚接触scrapy时候,须要把item通过pipelines处理后插入到mysql,写插入语句教程是将item数据一个个枚举出来,在字段特别多的时候仍是蛮麻烦的,并且可扩展性比较差,其实只要稍做封装就能很好的解决这种尴尬python
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()
日期格式化
因为对日期函数不是很熟悉,插入日期格式不对致使插入失败,后来查了下相关文档,清楚了不少mysql
一、由日期格式转化为字符串格式的函数为: datetime.datetime.strftime()
二、由字符串格式转化为日期格式的函数为: datetime.datetime.strptime()git
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 源码github