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‘, ‘2016001‘, 2, 36, 23, 43, 12, 25, 29),
             (‘2016-01-03‘, ‘2016002‘, 34, 35, 17, 49, 24, 30, 16),
             (‘2016-01-05‘, ‘2016003‘, 1, 35, 12, 49, 49, 26, 34),
             (‘2016-01-08‘, ‘2016004‘, 6, 35, 10, 40, 4, 23, 2),
             (‘2016-01-10‘, ‘2016005‘, 14, 35, 27, 40, 4, 12, 45),
             (‘2016-01-12‘, ‘2016006‘, 33, 10, 13, 21, 27, 22, 17),
             (‘2016-01-15‘, ‘2016007‘, 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‘, ‘2016001‘, 2, 36, 23, 43, 12, 25, 29),
             (‘2016/1/3‘, ‘2016002‘, 34, 35, 17, 49, 24, 30, 16),
             (‘2016/1/5‘, ‘2016003‘, 1, 35, 12, 49, 49, 26, 34),
             (‘2016/1/8‘, ‘2016004‘, 6, 35, 10, 40, 4, 23, 2),
             (‘2016/1/10‘, ‘2016005‘, 14, 35, 27, 40, 4, 12, 45),
             (‘2016/1/12‘, ‘2016006‘, 33, 10, 13, 21, 27, 22, 17),
             (‘2016/1/15‘, ‘2016007‘, 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)
时间: 2024-10-12 15:10:08

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

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

MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间      日期格式                日期范围------------  ---------  --------------------- -----------------------------------------datetime      8 bytes  YYYY-MM-DD HH:MM:SS  1000-01-01 00:00:00 ~ 9999-12-31 23:59:5

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

1.MySQL的五种日期和时间类型 MySQl中有多种表示日期和时间的数据类型.其中YEAR表示年份,DATE表示日期,TIME表示时间,DATETIME和TIMESTAMP表示日期和实践.它们的对比如下: TEAR ,字节数为1,取值范围为“1901——2155” DATE,字节数为4,取值范围为“1000-01-01——9999-12-31” TIME,字节数为3,取值范围为“-838:59:59——838:59:59” DATETIME,字节数为8,取值范围为“1000-01-01 00:

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

转自: http://blog.chinaunix.net/space.php?uid=11327712&do=blog&id=32416 MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ------------ --------- --------------------- ----------------------------------------- datetime 8 bytes YYYY-MM-DD HH:MM:SS 1

MySQL:MySQL日期数据类型、MySQL时间类型详解

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

SQLite3日期与时间,常见函数

import sqlite3 #con = sqlite3.connect('example.db') con = sqlite3.connect(":memory:") c = con.cursor() # Create table c.execute('''CREATE TABLE stocks (date text, trans text, symbol text, qty real, price real)''') # Insert a row of data c.execut

MySQL数据类型--日期时间

一.博客前言 自接触学习MySQL已有一段时间了,对于MySQL的基础知识还是有一定的了解的.在这一路学习过来,每次不管看书还是网上看的资料,对于MySQL数据类型中的时间日期类型总是一扫而过,不曾停下来认认真真的研究学习.最近在图书馆借了一本关于MysQL的书籍,打算全面的学习研究一遍. 在之前,我对于时间日期数据类型不怎么感冒,也没怎么用过这一类型.在我的做项目里用到存贮时间的数据,我都是采用int整型数据类型来存储,即是存储时间戳.但是在后面学习MySQL优化的时候,就有一个原则就是存储数

SQLite3初级使用

(1)SQL的指令格式 所有的SQL指令都是以分号(;)结尾的.如果遇到两个减号(--)则代表注解,sqlite3会略过去. (2)建立资料表 假设我们要建一个名叫film的资料表,只要键入以下指令就可以了: create table film(title, length, year, starring); 这样我们就建立了一个名叫film的资料表,里面有name.length.year.starring四个字段. 这个create table指令的语法为: create table table

Mysql基本类型(五种年日期时间类型)——mysql之二

转自:<MySQL技术内幕:时间和日期数据类型> http://tech.it168.com/a2012/0904/1393/000001393605_all.shtml

(十六)PL/SQL日期及时间

PL/SQL提供两个日期和时间相关的数据类型: 1.日期时间(Datetime)数据类型 DATE TIMESTAMP TIMESTAMP WITH TIME ZONE TIMESTAMP WITH LOCAL TIME ZONE 2.间隔数据类型 INTERVAL YEAR TO MONTH INTERVAL DAY TO SECOND   一.日期时间字段值和间隔数据类型这两个日期时间和间隔数据类型包括字段.这些字段的值确定的数据类型的值.下表列出了时间和间隔的字段及其可能的值. 字段名称