Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3 Sqlite3-如果值为null,则不插入_Python_Python 3.x_Sqlite - Fatal编程技术网

Python3 Sqlite3-如果值为null,则不插入

Python3 Sqlite3-如果值为null,则不插入,python,python-3.x,sqlite,Python,Python 3.x,Sqlite,我正在使用Python3.6和sqlite3 如何仅在值不为null时向数据库插入值? 我已经通过插入200个重复的行来测试了数据库,只是为了确保INSERT或IGNORE工作正常,然后我得到了全部由NULL填充的200行 我的插入代码是: cursor.execute("""INSERT OR IGNORE INTO mytable ( column1, column2, column3, column4, /* INT, PRIMARY KEY, UN

我正在使用Python3.6和sqlite3

如何仅在值不为null时向数据库插入值? 我已经通过插入200个重复的行来测试了数据库,只是为了确保INSERT或IGNORE工作正常,然后我得到了全部由NULL填充的200行

我的插入代码是:

cursor.execute("""INSERT OR IGNORE INTO mytable (
    column1,
    column2,
    column3,
    column4,     /* INT, PRIMARY KEY, UNIQUE
    column5,
    column6) 
VALUES (?,?,?,?,?,?)""",
(
    value1,
    value2,
    value3,
    value4,
    value5,
    value6))
conn.commit()
如何解决这个问题


现在,当我写这篇文章的时候,我想可能是因为我的主键栏不是第一个?这可能是真的吗?

插入或忽略是指执行插入操作,但忽略冲突(不要执行)。违反/不遵守约束时会发生冲突

看起来您几乎没有约束,并且猜测只有隐式约束。也就是说,如果您有
column4 INTEGER主键
或与AUTOINCREMENT相同的主键,则隐式约束(其中2个)是唯一的且不为NULL。但是,这样的列(rowid的别名)是特殊的,在被分配给表中唯一的整数的列中指定NULL结果(即,它唯一地标识行)

另外,立柱位置没有区别

因此,回到猜测,所有列都没有编码特定的约束,因此不会触发忽略,因为没有约束,所以不会发生冲突

对于不希望NULL为有效值的每一列,您应该做的是更改列定义以在列定义中包含NOTNULL(在列名和列类型之后)

因此,与其(作为示例)拥有:-

CREATE TABLE mytable (
    column1 TEXT,
    column2 TEXT,
    column3 TEXT,
    column4 INTEGER PRIMARY KEY,
    column5 TEXT,
    column6 TEXT
);
你应该:-

CREATE TABLE mytable (
    column1 TEXT NOT NULL,
    column2 TEXT NOT NULL,
    column3 TEXT NOT NULL,
    column4 INTEGER PRIMARY KEY,
    column5 TEXT NOT NULL,
    column6 TEXT NOT NULL
);
因此,将上表与以下SQL一起使用:-

-- NOTE column4 omitted from list of columns thus null
INSERT OR IGNORE INTO mytable (column1,column2,column3,column5,column6) VALUES
    (1,2,3,4,5),        -- Will be inserted as no conflict
    (6,7,null,null,10), -- conflict so ignored
    (11,12,13,14,15),  -- no conflict
    (null,17,18,19,20), -- conflict
    (21,22,23,24,25), -- no conflict
    (26,null,28,29,230) -- conflict
;
根据,仅插入3行,即使尝试插入空值,也不会插入空值:-

如果表是根据上面的第一个CREATE SQL定义的,则INSERT SQL的结果将是:-


为列提供NOTNULL约束