资讯专栏INFORMATION COLUMN

python:pymsql插入优化

未东兴 / 462人阅读

摘要:如星期三为月份的简写。如月份为月份的全写。如月份为日期时间的字符串表示。

</>复制代码

  1. 摘要

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

</>复制代码

  1. import pymysql
  2. from datetime import datetime
  3. class MyPyMysql(object):
  4. def __init__(self, user, passwd, db, host="localhost", port=3306, use_unicode=True):
  5. self.host = host
  6. self.port = port
  7. self.user = user
  8. self.passwd = passwd
  9. self.db = db
  10. self.connect = pymysql.connect(host=self.host, port=self.port, db=self.db, user=self.user, passwd=self.passwd,
  11. use_unicode=True)
  12. self.cursor = self.connect.cursor()
  13. def insert(self, table_name, kwargs):
  14. sql = "insert into {} ({}) VALUES {};".format(table_name, ",".join(list(kwargs.keys())),
  15. tuple(kwargs.values()))
  16. self.query(sql)
  17. """
  18. success excute insert into student (id,name,age,birthData) VALUES (12, "dalex", 20, "2018-03-15 14:32:35.271451");
  19. success excute insert into student (id,name,age,birthData) VALUES (23, "balex", 20, "2018-03-15 14:32:35.271451");
  20. """
  21. print("success excute {}".format(sql))
  22. def query(self, sql):
  23. self.cursor.execute(sql)
  24. self.connect.commit()
  25. def close(self):
  26. self.cursor.close()
  27. self.connect.close()
  28. if __name__ == "__main__":
  29. me = MyPyMysql("root", "root", "blog")
  30. birthData = str(datetime.now())
  31. me.insert("student", {"id": 12, "name": "dalex", "age": 20, "birthData": birthData})
  32. me.insert("student", {"id": 23, "name": "balex", "age": 20, "birthData": birthData})
  33. me.close()

</>复制代码

  1. 日期格式化

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

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

</>复制代码

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

</>复制代码

  1. 引用

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44620.html

相关文章

  • JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

    摘要:之所以把冒泡排序选择排序插入排序放在一起比较,是因为它们的平均时间复杂度都为。其中,冒泡排序就是原地排序算法。所以冒泡排序是稳定的排序算法。选择排序思路选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 1. 前言 算法为王。 想学好前端,先练好内功,...

    canger 评论0 收藏0
  • Spring/Hibernate 应用性能优化的7种方法

    摘要:对于大多数典型的企业应用而言,其性能表现几乎完全依赖于持久层的性能。速成法使用批处理对于批处理程序,驱动程序提供了旨在减少网络来回传输的优化方法。速成法检查错误的提交间隔如果你使用批处理程序,提交间隔会对性能造成十倍甚至百倍的影响。 对于大多数典型的 Spring/Hibernate 企业应用而言,其性能表现几乎完全依赖于持久层的性能。此篇文章中将介绍如何确认应用是否受数据库约束,同时...

    lavor 评论0 收藏0
  • 糊涂算法之「八大排序」总结——用两万字,8张动图,450行代码跨过排序这道坎(建议收藏)

    摘要:今天,一条就带大家彻底跨过排序算法这道坎,保姆级教程建议收藏。利用递归算法,对分治后的子数组进行排序。基本思想堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为,它也是不稳定排序。 ...

    greatwhole 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<