pymsql 处理数据库列表包含毫秒的数据有好办法没?

2018-08-24 23:10:58 +08:00
 qile1

如题,最近遇到几个链接 mssql 数据库功能, 使用 pymsql 进行 sql 语句拼接。 pymsql 获取的时间直接变成 datetime 类型,毫秒位数比较多,

比如 2018-08-22 12:12:56.2888 我将其转为字符串方法:

先返回时间字符串+"."+毫秒字符串[:3 ] 直接插入 sql 语句报错,sql 查询时间毫秒是三位 如 2018-12-12 23:14:25.200 ,所以做了截取。

总感觉这种方法不合适,有没有比较好的方法。

1851 次点击
所在节点    Python
4 条回复
anonymous256
2018-08-24 23:30:23 +08:00
不太清楚你的意思,好像是字符串中小数位数的保留的问题,4 位改成三位,截短。
如果是这样的话,可以是使用 format()字符串格式化方法。

如:
'{0:<23}'.format('2018-08-22 12:12:56.2888')

0 对应这个字符串
:表示格式
<表示左对齐
23 表示字符串保留的长度。

format 的功能比较强大,你可以搜下相关的博文,查具体的用法。
qile1
2018-08-25 15:40:59 +08:00
@anonymous256 多谢回复,我具体应用场景是:从数据库 查询修改时间:2018-07-27 11:17:51.327
然后把时间作为数据库查询字段进行再次查询。
当我使用 pymsql 获取到的时间是 “ 2018-08-25 15:32:41.291339 ”
正常数据库时间是 2018-08-25 15:32:41.291
当我直接构建查询语句
····
str1=datetime.datetime.now()
#if len(str1)>23:
# str1=str1[:23]
sql=” select * from A where time1=‘“+str1+”‘“
#sql 语句 select * from A where time1=’ 2018-08-25 15:32:41.291339 ‘
#正确语句 select * from A where time1=’ 2018-08-25 15:32:41.291 ‘
····
此 sql 执行报错 我现在是用条码判断语句直接截取,感觉方式不对,特来问问有啥好办法
····
if len(str1)>23:
str1=str1[:23]
····
anonymous256
2018-08-25 17:09:03 +08:00
if len(str1)>23:
上面这条语句是不能执行的。datetime.datetime 类型的对象,是没有 len 方法的,这么执行你讲得到异常:"TypeError"。

1. 不过你可以把 datetime 对象转化为 str,然后我用切片进行截短。例如 len(str(str1))是可行的,但这样就不太优雅了。

2. 如果是想获得字符串格式的时间,建议:
str1 = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S:%f)
cursor.excute(' select * from A where time1={}'.format(str1))

这样子是可行的。如果精度要求不高。

如果 str1 你总是想保留后面三位小数,那么比如截取重新生成一个。

#1 更正: 我在 1 楼关于 format 的用法有误{0:23}.format()是针对数字操作的,不能想当然也处理 str
anonymous256
2018-08-25 17:28:33 +08:00
更正如下:
str1 = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S)
cursor.excute(' select * from A where time1={}'.format(str1))

说明: str1 中的%f 忘了去掉。

没有测试 mysql 是否支持五位数小数%f,理论上是支持的,楼主自行测试一下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/483028

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX