嗨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()
如何证明日期行中的条目是否为日期时间识别
答案 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