【问题标题】:SQL variable missing quotationsSQL 变量缺少引号
【发布时间】:2012-06-24 23:48:39
【问题描述】:

我正在使用数据库,并且在 column_x 中的一些变量为 NULL。由于有人不喜欢这个,我们决定将其更改为“无”。现在我使用以下命令在 Python 中更改它:

 query = "update stone set results = 'None' where results is null;"

但是当我这样做时:

 query = "SELECT * FROM stone where part = 'ABC';"

我得到一个输出 'x','y','z',None,'a'

但是当我这样做时:

 query = "SELECT * FROM stone where part = 'ABC' and results = 'None';"

我得到 () 返回。这可能是因为“无”不存在。这么短的问题很长,我如何通过 Python 更改 None -> 'None'?

【问题讨论】:

  • 这会总是成为你的模式吗('ABC' 和 'None')?如果没有,使用参数将有助于解决这个问题。另外,请确保您正确转义了字符串“None”。最后,您可能希望直接在数据库上运行此查询,以查看是否真的一个结果集符合您的搜索条件。
  • 是的,抱歉,我可能没有说清楚。我寻找石头'ABC',如果我将结果留空,我会找到它。 Stone 'ABC' 结果的值 = None 但是,当我搜索 'ABC' 和 'None' 时,我没有得到结果。我认为这是因为 None != 'None'
  • 我错过了什么吗?我的理解是数据库供应商修复了 NULL(没有任何值)。如果返回 NULL,您如何查找 None,除非这些是字符串变量,并且您使用 None 或 NULL 编写。是这样吗?
  • 数据库包含的结果选项 'Available','None',NULL 现在我们将 NULL 更改为 'None'(我们认为)但是现在我们有 'Available,'None',None 并且我们无论我们尝试什么,都无法将 None 更改为“None”...
  • stone (describe stone;) 的表定义是什么?

标签: python sql variables quotes


【解决方案1】:

我不确定当您说 None 时是否意味着 null。 如果您打算 None 表示 null,您可以使用类似这样的内容(MYSQL):

sql = "UPDATE stone set results=\'None\' where results is null" 游标 = conn.Execute($sql) rows = cursor.Affected_Rows()

对于 Oracle,执行以下 SQL:

sql = "更新石集结果=''None'' where results='None'" 游标 = conn.Execute($sql) rows = cursor.Affected_Rows()

对于 MYSQL,您需要使用反斜杠来转义刻度 - 类似于

sql = "更新石集结果=\'None\' where results='None'" 游标 = conn.Execute($sql) rows = cursor.Affected_Rows()

另请参阅 http://phplens.com/lens/adodb/adodb-py-docs.htm http://www.codersrevolution.com/index.cfm/2008/7/13/Just-when-you-felt-safe-SQL-Injection-and-MySQL

【讨论】:

  • 我不确定这是否与我现在作为测试用例的 python 完全一样:“UPDATE stone set results = 'None2' where results='None';”然而,这不会改变变量值...
  • 我不确定你说的 None 是否意味着 null?如果你想让 None 表示 null 你可以使用这样的东西(MYSQL): sql = "UPDATE stone set results=\'None\' where results is null" cursor = conn.Execute($sql) rows = cursor.Affected_Rows( )
  • 我现在所做的如下,我将 NULL 更改为 None 但是当我对从 NULL 更改为 None 的变量执行 select 语句时不包含引号,因此 None 不像 'None' 和因此,当 SELECT * FROM stone WHERE results = 'None' ... 并且 results = None 无法工作时,无法找到,因为 SQL 不允许这样做。我什至尝试通过...“UPDATE stone set results = 'None2' where results = 'None';”将 None 更改为其他内容但它不会再改变了......奇怪......
猜你喜欢
  • 2023-04-07
  • 2016-08-16
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2015-11-21
相关资源
最近更新 更多