如何将Python None设置为db3 Null
我在Python值中有以下值:如何将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”放到表中。我想要空的。 如何
_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
对象将作为SQLiteNULL
插入。您可以在中阅读有关参数替换的更多信息,以及Python值如何转换为SQLite值,反之亦然。我最初评论了使用参数替换的建议,假设它实际上并不相关。不过,经过进一步检查,我认为这正是你想要的
您的代码当前插入了所有字符串,因为您正在用Python显式地将所有内容转换为字符串。参数替换使Python能够处理如何将其值放入数据库,并保护您免受SQL注入攻击
conn.execute("INSERT INTO " + dbutils.table + " (PkgID, Package, PkgParentID) VALUES (?,?,?)", (PkgID, Package, PkgParentID))
使用此方法,Python
None
对象将作为SQLiteNULL
插入。您可以阅读中有关参数替换的更多信息,以及Python值如何转换为SQLite值,反之亦然。只使用None
,不带引号。因为它是通过一个函数进行的,所以它会将None转换为“None”。如何恢复?谢谢您在哪里调用此函数StorePackage
,您传递的实际数据是什么?抱歉。它们是值,不是变量。每个存储在它自己的变量中。我重新编辑了这个问题,只使用了None
,没有引号。因为它要通过一个函数,所以它会将None转换为“None”。如何恢复?谢谢您在哪里调用此函数StorePackage
,您传递的实际数据是什么?抱歉。它们是值,不是变量。每个存储在它自己的变量中。我重新编辑了问题,似乎他删除了这条评论。让我添加链接OK。我希望我能打两个勾。非常感谢。他似乎删除了这条评论。让我添加链接OK。我希望我能打两个勾。非常感谢。如果“如果”他使用了参数替换,他就会避免这个问题。但引起他的问题的不是参数替换。我同意应该鼓励使用参数替换,但“如果”他会使用参数替换,他会避免这个问题。但引起他的问题的不是参数替换。不过,我同意应该鼓励使用参数替换