插入时忽略的python SQlite日期时间格式

时间:2017-09-20 10:35:41

标签: python sqlite datetime

嗨python / sqlite专家,

我有一种非常奇怪的行为,我无法向自己解释。也许你可以: 我有一个只有一个表的sqlite DB:

syntax

);

使用Pyhton我从csv文件中添加了一些数据:

CREATE TABLE testme (
    id     INTEGER  PRIMARY KEY AUTOINCREMENT
                   UNIQUE
                   NOT NULL,
   dataId STRING   NOT NULL,
   Sender STRING   NOT NULL,
   Value  DECIMAL  NOT NULL,
   Date   DATETIME NOT NULL

之后我在日期栏中找到了一个带有字符串条目的行....:

import csv
import sys
import sqlite3 as lite

con = lite.connect('data.db3')
f = open('Export_378334000.csv', 'rt')
cur = con.cursor()
cur.execute("delete from data1")
con.commit()
cur.execute("vacuum")
con.commit()
try:
    reader = csv.reader(f, delimiter="\t")
    for row in reader:
        print ("Name: " + row[0])
        print ("Betrag: " + row[6])
        print ("Datum: " + row[9])
        print ("id: " + row[21])
        cur.execute("INSERT INTO data1 (dataid,sender,value,date) VALUES ('" + row[21] + "','" + row[0] + "','" + row[6] + "','"  + row[9] + "')")
     con.commit()

finally:
    con.commit()
    f.close()

如何证明日期行中的条目是否为日期时间识别

1 个答案:

答案 0 :(得分:0)

正如评论中已经提到的,SQLite将接受任何列中的任何内容,无论其数据如何。这就是为什么你在datetime找到一个带字符串的行。

  

如何证明日期行中的条目是否为日期时间识别

但您可以定义一个约束,以保证只有he列可以接受具有正确日期时间格式的值。创建表时,设置检查规则:

d DATE CONSTRAINT date_format_check CHECK (DATE(d) IS NOT NULL)

示例

create table test (
    test_date DATE CONSTRAINT date_format_check CHECK (date(test_date) is not NULL)
)

insert into test values ('2017-01-01');
insert into test values ('oops!');
select * from test