sqlite3日期数据类型
一、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日期数据类型的更多相关文章
- SQL2008 的 日期数据类型
摘要 你是否曾经想在数据库中存储一个日期而没有时间部分,或者想存储一个时间值希望有更高的精度?在SQL Server 2008的介绍中,微软介绍了一些新的日期数据类允许你只存储一个日期.更高精度的时间 ...
- MySQL日期数据类型、时间类型使用总结
MySQL日期数据类型.时间类型使用总结 MySQL日期数据类型.MySQL时间类型使用总结,需要的朋友可以参考下. MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 ...
- MySQL日期数据类型、MySQL时间类型使用总结
MySQL:MySQL日期数据类型.MySQL时间类型使用总结 MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ------------ --- ...
- SQLite3日期与时间,常见函数
SQLite3日期与时间,常见函数 import sqlite3 #con = sqlite3.connect('example.db') con = sqlite3.connect(":m ...
- MySQL日期数据类型总结
MySQL:MySQL日期数据类型.MySQL时间类型使用总结 MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 ...
- MySQL日期数据类型和时间类型使用总结
转自: http://blog.chinaunix.net/space.php?uid=11327712&do=blog&id=32416 MySQL 日期类型:日期格式.所占存储空间 ...
- MySQL:MySQL日期数据类型、MySQL时间类型使用总结
MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围------------ -------- ...
- Oracle中的日期数据类型
TimeStamp日期类型 TimeStamp数据类型用于存储日期的年.月.日,以及时间的小时.分和秒,其中秒值精确到小数点后6位,该数据类型 同时包含时区信息.systimestamp函数的功能是返 ...
- POI处理Excel中的日期数据类型
在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理. 正确的处理方法是先判断单元格 的类型是否则NUMERIC类型, 然后再判断单元格是 ...
随机推荐
- 记录智能指针使用shared_ptr使用错误
shared_ptr为智能指针,今天一次在使用shared_ptr时,错误的将其初始化方式写为shared_ptr<T> test = shared_ptr<T>(),随后导致 ...
- android--简单的电话拨号功能
方法一. 1.创建一个callphone项目 2.在string.xml文件中添加text名称的配置
- meta标签的使用(转)
1.Expires(期限) 说明:可以用于设定网页的到期时间.一旦网页过期,必须到服务器上重新传输. 用法: <meta http-equiv="expires" conte ...
- Java虚拟机12:虚拟机性能监控与故障处理工具
前言 定位系统问题的时候,知识.经验是基础,数据是依据,工具是运用知识处理数据的手段.这里说的数据包括:运行日志.异常堆栈.GC日志.线程快照.堆转储快照等.经常使用适当的虚拟机监控和分析的工具可以加 ...
- struct class 内存结构初探-内存模型顺序和变量的实际添加顺序一致
typedef struct structTest { char xchar; int xint; int yint; }xStruct; @interface ViewController () { ...
- PostgreSQL 常用的命令
连接数据库: psql -h ip -U usrname查看所有库: \l查看所有表: \dt查看某个表的结构: \d 表名查看数据库中所有的表: select * from pg_tables;查看 ...
- 通过iframe标签绕过csp
iframe.php代码如下: allow-popups开启时,window.open就可以打开新的窗口. 看csp规则,默认是在当前域内,如果这是一个ctf题的话,就很简单了,window.loca ...
- Odoo中的模型在哪里
Odoo 模型存在 Python 的模块之外, 在中间注册表那里. 对于这个注册表,可以通过self.env[<model name>]进入,例如, 通过res.partner 模型获取对 ...
- EF中連表查詢的應用方式
1.首先我們想讓列表頁顯示兩個表的共同數據 這裡有兩張表 public class mytype { public int mytypeID { get; set; } ...
- Asp.Net Core + Ocelot 网关搭建:负载均衡的配置
前言 上一篇中简单做了一个网关Demo.本篇中也记录一下负载均衡的配置实现. 演示 首先开三个服务,端口分别为 60001,60003,60005,然后分别启动三个服务.接下来在ApiGate ...