Python 标准库类的规范似乎是类名小写 - 这似乎适用于内置函数,例如str和 ,int以及作为必须导入的标准库模块一部分的大多数类,例如datetime.date或datetime.datetime。
但是,某些标准库类(例如enum.Enum和 )decimal.Decimal是大写的。乍一看,当类的名称等于模块名称时,类似乎是大写的,但并非在所有情况下都如此(例如datetime.datetime)。
Python 标准库中类名大写约定背后的基本原理/逻辑是什么?
MySQL有两种数据类型,专门用于存储日期和时间值 - DATETIME和TIMESTAMP.两种类型都不存储时区信息,并且两者都有不同的规则.
甲DATETIME柱将存储在插入查询而提供准确的日期和时间值.(没有时间的转换和没有支持)
甲TIMESTAMP列将转换从在插入时间为UTC的连接的时区设置在插入的日期和时间值.在检索时,它会将从UTC存储的日期和时间值转换为检索连接的时区.可以根据这些规则显式或隐式地设置两个连接的时区.
在我回答我的问题之前,让我们看看处理夏令时的日期和时间的一些细微差别.总结另一个Stack Overflow问题的答案,以及我从MySQL文档中了解的有关日期/时间的内容:
DATETIME列并显式指定值(即/ 2009-11-01 01:30:00)时,该值可能不明确.DATETIME不执行任何对话,只需存储这个确切的日期/时间.说我在纽约(夏令时之后).在插入和检索时,我无法指示/知道此值是指在夏令时(UTC-4)的1:30 AM还是在非夏令时(UTC-5)的1:30 AM ).DATETIME列一起使用时NOW(),NOW()在查询执行开始时评估日期和时间值(即/ 2009-11-01 01:30:00),并且在没有转换的情况下将该值插入到DATETIME字段中,从而导致与上述相同的模糊性.TIMESTAMP列并明确指定值(即/ 2009-11-01 01:30:00)时,我再次遇到与上述相同的问题.没有办法指明,也没办法知道我指的是凌晨1:30.现在,这是我的问题:
鉴于被设定为包括夏令(比方说一个时区MySQL数据库连接America/New York),我可以肯定的是插入NOW()到一个TIMESTAMP柱将导致存储了正确的UTC时间和日期值?UTC当然不会观察夏令时,因此纽约时区凌晨1:30的UTC时间与夏令时不同于纽约时区凌晨1:30的UTC时间,没有夏令时.
更具体地说:在我从列中插入/选择时,在查询执行开始时连接时区的UTC偏移是用于执行to-UTC/from-UTC转换的内容TIMESTAMP吗?回到我的例子,在凌晨1:30,夏令America\New York时(时区)我在UTC-4和凌晨1:30没有夏令America\New York时(时区)我在UTC-5 -所以在这两个时刻,TIMESTAMP当我 …
假设我编写以下python代码:
file = open("test.txt","w+")
file.write("hi")
file.seek(0)
file.read()
Run Code Online (Sandbox Code Playgroud)
第二行告诉Python我想写"hi"到文件.当然这里涉及两个缓冲区 - 内部Python缓冲区和操作系统缓冲区 - 所以"hi"实际上可能不会写入文件.据我所知,如果我用文件显式刷新文件file.flush()或关闭文件,file.close()那么Python缓冲区将被清除,Python将使用操作系统API写入方法.我也理解,在这两种情况下(我明确地称为刷新或关闭),不能保证操作系统实际上会写入磁盘(为了保证我必须调用os.fsync(file)).
无论如何,在上面的代码中,我不会调用flush也不会关闭.所以这是我的问题:
在写操作之后,当我将文件指针返回到文件的开头(file.seek(0))和/或从文件(file.read())中读取时,是否可以保证Python将刷新自己的缓冲区?如果这是有保证的,保证刷新是否是搜索操作,读操作或者其中之一?换句话说,搜索和/或读取是否自动执行刷新?为了清楚起见,我不是在谈论操作系统刷新到磁盘,我非常积极并不能保证 - 我只是在谈论Python自己的缓冲区.
当我测试它时,似乎读取和搜索都刷新了Python的缓冲区,但我不确定这是否只是可能的行为或保证行为.
如果这不是保证行为,我仍然可以依赖于在file.write之后调用file.seek或file.read(即/是否有一些其他内部机制来处理不涉及操作系统写入的内容)?或者最好的做法是file.flush()在写作之后总是在寻找或阅读之前打电话?
这两条 SQL 语句在所有情况下都相同吗?
SELECT DISTINCT * FROM
(SELECT * FROM tablename UNION ALL SELECT * FROM tablename2) dummyname
Run Code Online (Sandbox Code Playgroud)
和
SELECT * FROM tablename UNION SELECT * FROM tablename2
Run Code Online (Sandbox Code Playgroud)
我总觉得 UNION 很奇怪的一点是它会删除所有非不同的行,即使这些非不同的行出现在 UNION 子句的单个部分中。例如,假设表名只有一列:amt INT。假设 amt INT 不是主键并且对其没有任何唯一约束。然后假设我有两行,其中 amt = 20。无论我使用什么 UNION,结果集中只会出现这两行中的一行。
我正在向其他人解释这种行为,然后想出了上面的例子来证明 UNION 的行为......我相信上面的这两个陈述是相同的(总是),但我只是想确保我所说的是正确的。是否存在上述两个 SQL 语句不会生成完全相同的结果集的边缘情况?