Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
如何将Python None设置为db3 Null_Python_Sqlite - Fatal编程技术网

如何将Python None设置为db3 Null

如何将Python None设置为db3 Null,python,sqlite,Python,Sqlite,我在Python值中有以下值: _sfwBIPMKEeCTfuMZpaDEBQ Atomic Warehouse Model None 这些值通过函数发送,并放入db3表中,如下所示: INSERT INTO [PackageRoster] (PkgID, Package, PkgParentID) VALUES ('_sfwBIPMKEeCTfuMZpaDEBQ', 'Atomic Warehouse Model', 'None'); 我不想把字符串“None”放到表中。我想要空的。 如何

我在Python值中有以下值:

_sfwBIPMKEeCTfuMZpaDEBQ Atomic Warehouse Model None
这些值通过函数发送,并放入db3表中,如下所示:

INSERT INTO [PackageRoster] (PkgID, Package, PkgParentID) VALUES ('_sfwBIPMKEeCTfuMZpaDEBQ', 'Atomic Warehouse Model', 'None');
我不想把字符串“None”放到表中。我想要空的。 如何告诉Python注入NULL而不是None

下面是用于语句的函数(包括调试功能):


谢谢

您正在将所有值转换为字符串,因为您在其周围添加了引号。也就是说,因为你做了
“+str(PkgParentID)+”
,它将以
'None'
而不是
None
结束

例如,您应该在查询之前将值转换为字符串,当值为空时,将其替换为
NULL

def StorePackage(PkgID, Package, PkgParentID):
    PkgParentID = "'{}'".format(PkgParentID) if PkgParentID is not None else "NULL"
    # Same for other parameters if desired

    dbutils.ResetTable()
    conn = sqlite3.connect(dbutils.db)
    query = "INSERT INTO " + dbutils.table + " (PkgID, Package, PkgParentID) VALUES ('" + PkgID + "', '" + Package + "', " + PkgParentID + ");"
    try:
        conn.execute(query)
    except:
        print(query)
    conn.commit()

此外,您还应该使用,尽管这不是问题的根源

您正在将所有值转换为字符串,因为您在其周围添加了引号。也就是说,因为你做了
“+str(PkgParentID)+”
,它将以
'None'
而不是
None
结束

例如,您应该在查询之前将值转换为字符串,当值为空时,将其替换为
NULL

def StorePackage(PkgID, Package, PkgParentID):
    PkgParentID = "'{}'".format(PkgParentID) if PkgParentID is not None else "NULL"
    # Same for other parameters if desired

    dbutils.ResetTable()
    conn = sqlite3.connect(dbutils.db)
    query = "INSERT INTO " + dbutils.table + " (PkgID, Package, PkgParentID) VALUES ('" + PkgID + "', '" + Package + "', " + PkgParentID + ");"
    try:
        conn.execute(query)
    except:
        print(query)
    conn.commit()

您还应该使用,尽管这不是问题的根源

我最初评论了使用参数替换的建议,假设它实际上没有关系。不过,经过进一步检查,我认为这正是你想要的

您的代码当前插入了所有字符串,因为您正在用Python显式地将所有内容转换为字符串。参数替换使Python能够处理如何将其值放入数据库,并保护您免受SQL注入攻击

conn.execute("INSERT INTO " + dbutils.table + " (PkgID, Package, PkgParentID) VALUES (?,?,?)", (PkgID, Package, PkgParentID))

使用此方法,Python
None
对象将作为SQLite
NULL
插入。您可以在中阅读有关参数替换的更多信息,以及Python值如何转换为SQLite值,反之亦然。

我最初评论了使用参数替换的建议,假设它实际上并不相关。不过,经过进一步检查,我认为这正是你想要的

您的代码当前插入了所有字符串,因为您正在用Python显式地将所有内容转换为字符串。参数替换使Python能够处理如何将其值放入数据库,并保护您免受SQL注入攻击

conn.execute("INSERT INTO " + dbutils.table + " (PkgID, Package, PkgParentID) VALUES (?,?,?)", (PkgID, Package, PkgParentID))

使用此方法,Python
None
对象将作为SQLite
NULL
插入。您可以阅读中有关参数替换的更多信息,以及Python值如何转换为SQLite值,反之亦然。

只使用
None
,不带引号。因为它是通过一个函数进行的,所以它会将None转换为“None”。如何恢复?谢谢您在哪里调用此函数
StorePackage
,您传递的实际数据是什么?抱歉。它们是值,不是变量。每个存储在它自己的变量中。我重新编辑了这个问题,只使用了
None
,没有引号。因为它要通过一个函数,所以它会将None转换为“None”。如何恢复?谢谢您在哪里调用此函数
StorePackage
,您传递的实际数据是什么?抱歉。它们是值,不是变量。每个存储在它自己的变量中。我重新编辑了问题,似乎他删除了这条评论。让我添加链接OK。我希望我能打两个勾。非常感谢。他似乎删除了这条评论。让我添加链接OK。我希望我能打两个勾。非常感谢。如果“如果”他使用了参数替换,他就会避免这个问题。但引起他的问题的不是参数替换。我同意应该鼓励使用参数替换,但“如果”他会使用参数替换,他会避免这个问题。但引起他的问题的不是参数替换。不过,我同意应该鼓励使用参数替换