一、sqlite3日期数据类型,默认用datetime解析(根据stackflow)

使用时注意三点:

  1. 创建表时,字段 DT 的类型为 date

  2. 插入数据时,DT字段直接为 str 类型

  3. DT字段的str ,年月日必须为 xxxx-xx-xx 格式,如 2016-01-01,不能是 2016-1-1

import sqlite3
import datetime '''sqlite3日期数据类型'''
con = sqlite3.connect(":memory:")
c = con.cursor() # Create table
c.execute('''CREATE TABLE marksix
(DT date, Period text, P1 int, P2 int, P3 int, P4 int, P5 int, P6 int, T7 int)''') # Larger example that inserts many records at a time
purchases = [('2016-01-01', '', 2, 36, 23, 43, 12, 25, 29),
('2016-01-03', '', 34, 35, 17, 49, 24, 30, 16),
('2016-01-05', '', 1, 35, 12, 49, 49, 26, 34),
('2016-01-08', '', 6, 35, 10, 40, 4, 23, 2),
('2016-01-10', '', 14, 35, 27, 40, 4, 12, 45),
('2016-01-12', '', 33, 10, 13, 21, 27, 22, 17),
('2016-01-15', '', 20, 35, 17, 49, 5, 29, 28),
]
c.executemany('INSERT INTO marksix (DT,Period,P1,P2,P3,P4,P5,P6,T7) VALUES (?,?,?,?,?,?,?,?,?)', purchases)
for row in c.execute('SELECT * FROM marksix'):
print(row)
# ==============================================================
# 方式一:显式使用 datetime 类型
t = datetime.datetime.strptime('2016-1-5', '%Y-%m-%d')
dt = (datetime.date(t.year, t.month, t.day), )
for row in c.execute('SELECT * FROM marksix WHERE DT = ?', dt):
print(row) # 方式二:直接使用 str 类型
dt = ('2016-01-05', )
for row in c.execute('SELECT * FROM marksix WHERE DT = ?', dt):
print(row)

#for row in c.execute('SELECT * FROM marksix WHERE dt BETWEEN :begin AND :end;', {"begin": '2016-01-03', "end": '2016-01-11'}):
for row in c.execute('SELECT * FROM marksix WHERE dt BETWEEN ? AND ?;', ('2016-01-03', '2016-01-11')):
print(row)

二、另一种方式使用时间类型数据(根据官网文档)

import sqlite3
import datetime # 适配器
def adapt_date(date):
return datetime.datetime.strftime('%Y/%m/%d', date)
#return date.strftime('%Y/%m/%d').encode('ascii')
#return date.strftime('%Y/%m/%d').encode() # 转换器
def convert_date(string):
return datetime.datetime.strptime(string.decode(), '%Y/%m/%d') # 注册适配器
sqlite3.register_adapter(datetime.datetime, adapt_date) # 注册转换器
sqlite3.register_converter("date", convert_date) # 注意:detect_types=sqlite3.PARSE_DECLTYPES
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
c = con.cursor() # Create table
c.execute('''CREATE TABLE marksix
(dt date, period text, p1 int, p2 int, p3 int, p4 int, p5 int, p6 int, t7 int)''') # Larger example that inserts many records at a time
purchases = [('2016/1/1', '', 2, 36, 23, 43, 12, 25, 29),
('2016/1/3', '', 34, 35, 17, 49, 24, 30, 16),
('2016/1/5', '', 1, 35, 12, 49, 49, 26, 34),
('2016/1/8', '', 6, 35, 10, 40, 4, 23, 2),
('2016/1/10', '', 14, 35, 27, 40, 4, 12, 45),
('2016/1/12', '', 33, 10, 13, 21, 27, 22, 17),
('2016/1/15', '', 20, 35, 17, 49, 5, 29, 28),
]
c.executemany('INSERT INTO marksix VALUES (?,?,?,?,?,?,?,?,?)', purchases) # Save (commit) the changes
con.commit() for row in c.execute('SELECT * FROM marksix'):
print(row) # ============================================================== # 显示日期等于2016/1/3的记录
t = ('2016/1/3',)
c.execute('SELECT * FROM marksix WHERE dt = ?', t)
print(c.fetchone()) # 貌似不支持between运算,不知原因!
for row in c.execute('SELECT * FROM marksix WHERE dt BETWEEN ? AND ?;', ('2016/1/3', '2016/1/11')):
print(row)

三、还有一种日期时间类型:timestamp(时间戳)

import datetime

# Converting SQLite values to custom Python types
# Default adapters and converters for datetime and timestamp
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
cur = con.cursor() cur.execute('''create table test(
d date,
ts timestamp
)''') # 插入datetime类型
today = datetime.date.today()
now = datetime.datetime.now()
day1 = datetime.timedelta(days=1)
data = [(today-day1, now-day1),
(today, now),
(today+day1, now+day1)]
cur.executemany("insert into test(d, ts) values (?, ?)", data) # 插入 str 类型
data = [('2016-01-22', '2016-01-22 08:45:50'),
('2016-02-22', '2016-02-22 08:45:50'),
('2016-03-22', '2016-03-22 08:45:50')]
cur.executemany("insert into test(d, ts) values (?, ?)", data) for row in cur.execute("select * from test"):
print(row) #================================================================= #begin = datetime.date(2016, 2, 22)
#end = datetime.date(2016, 2, 23)
begin = '2016-02-22'
end = '2016-02-23'
for row in cur.execute("select * from test where d BETWEEN ? AND ?", (begin, end)):
print(row) begin = datetime.datetime(2016, 2, 22, 8, 45, 50, 0)
end = datetime.datetime(2016, 2, 23, 20, 10, 47, 12345)
#begin = '2016-02-22 08:45:50'
#end = '2016-02-23 20:10:47'
for row in cur.execute("select * from test where ts BETWEEN ? AND ?", (begin, end)):
print(row)

sqlite3日期数据类型的更多相关文章

  1. SQL2008 的 日期数据类型

    摘要 你是否曾经想在数据库中存储一个日期而没有时间部分,或者想存储一个时间值希望有更高的精度?在SQL Server 2008的介绍中,微软介绍了一些新的日期数据类允许你只存储一个日期.更高精度的时间 ...

  2. MySQL日期数据类型、时间类型使用总结

    MySQL日期数据类型.时间类型使用总结 MySQL日期数据类型.MySQL时间类型使用总结,需要的朋友可以参考下.   MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型    ...

  3. MySQL日期数据类型、MySQL时间类型使用总结

    MySQL:MySQL日期数据类型.MySQL时间类型使用总结 MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ------------ --- ...

  4. SQLite3日期与时间,常见函数

    SQLite3日期与时间,常见函数 import sqlite3 #con = sqlite3.connect('example.db') con = sqlite3.connect(":m ...

  5. MySQL日期数据类型总结

    MySQL:MySQL日期数据类型.MySQL时间类型使用总结 MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间      日期格式           ...

  6. MySQL日期数据类型和时间类型使用总结

    转自: http://blog.chinaunix.net/space.php?uid=11327712&do=blog&id=32416 MySQL 日期类型:日期格式.所占存储空间 ...

  7. MySQL:MySQL日期数据类型、MySQL时间类型使用总结

    MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间      日期格式                日期范围------------  -------- ...

  8. Oracle中的日期数据类型

    TimeStamp日期类型 TimeStamp数据类型用于存储日期的年.月.日,以及时间的小时.分和秒,其中秒值精确到小数点后6位,该数据类型 同时包含时区信息.systimestamp函数的功能是返 ...

  9. POI处理Excel中的日期数据类型

    在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理. 正确的处理方法是先判断单元格 的类型是否则NUMERIC类型, 然后再判断单元格是 ...

随机推荐

  1. C对64位整数类型的支持

    在使用C语言过程中可能需要接触长整数类型,其中包括固定长度数据类型的声明.输入输出函数的标志符等细节,在此记录. int64_t 与 uint64_t C的标准只规定特定数据类型需要实现的最小长度,特 ...

  2. Python读取Json字典写入Excel表格的方法

    需求: 因需要将一json文件中大量的信息填入一固定格式的Excel表格,单纯的复制粘贴肯定也能完成,但是想偷懒一下,于是借助Python解决问题. 环境: Windows7 +Python2.7 + ...

  3. 对deferred(延迟对象)的理解

    deferred对象从jQuery 1.5.0开始引入 什么是defrred对象 开发网站过程中,我们经常遇到某些耗时长的JS操作,其中,既有异步操作(如Ajax读取服务器数据),也有同步的操作(如遍 ...

  4. concatenate函数

    numpy.concatenate((a1, a2, ...), axis=0) Join a sequence of arrays along an existing axis.(按轴axis连接a ...

  5. 【zigbee】【蓝牙】射频信号放大器兼容AT2401C

    现在科技产品的不断进步,智能家居方面慢慢对信号和距离方面的要求渐渐增加.深圳市动能世纪科技有限公司不断的满足客户需求,推出了一款射频信号放大器AT2401C满足客户距离信号等等的需求.并全方位技术支持 ...

  6. Shell笔记-03

    前面已经讲到,变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 运 ...

  7. VS Code 常用插件列表

    插件列表 Auto Close Tag 自动闭合HTML标签 Auto Rename Tag 修改HTML标签时,自动修改匹配的标签 Bookmarks 添加行书签 Can I Use HTML5.C ...

  8. 使用java代码将时间戳和时间互相转换

    时间戳转时间: SimpleDateFormat simpleDateFormat = null; simpleDateFormat = new SimpleDateFormat("yyyy ...

  9. Notes 20180309 : String第一讲_char的可读序列

    实际上在写本文之前,我曾考虑是先探讨面向对象,还是先选择String和Arrays,最后还是选择了后者,并非是面向对象对我们不重要,相反它是Java的灵魂所在,之所以这样的安排是因为这两个是在是我们程 ...

  10. Java中 方法的多态 简析图

    代码如下: public class Client{    public static void main(String[] args){        Person p = new Person() ...