【问题标题】:How to insert NULL value in SQL nvarchar column using python如何使用 python 在 SQL nvarchar 列中插入 NULL 值
【发布时间】:2020-04-07 11:17:29
【问题描述】:

我试图在 SQL 表中从 python 插入 None,但它作为字符串 'null' 插入

我正在使用下面的代码集。

query_update = f'''update table set Name = '{name}',Key = '{Key}' where Id = {id} '''
            stmt.execute(query_update)
            conn.commit()

我在 python 中获取变量“Key”的值,我试图在“Key”列中更新这些值。这两列是 nvarchar 列。

现在有时我们在变量'Key'中得到None值Null,如下所示

Key = '空'

因此,当我在 SQL 中插入上述值时,它会更新为字符串而不是 NULL,因为我在从 Python 更新时必须在脚本中添加引号。

任何人都可以在这里帮助我,如何避免在从 Python 的 SQL 中插入 Null 时插入字符串

【问题讨论】:

  • 不要使用f-strings(或任何其他字符串格式)来参数化 SQL 查询。这不安全。按照the docs 所示进行操作。并且在使用None时也能解决你的问题。
  • 是的,同意,您的问题是引号以及您如何生成该字符串

标签: python sql pyodbc


【解决方案1】:

你的Null 值实际上是一个字符串而不是“真正的”Null 的问题。 如果你想插入 Null,你的 key 应该等于None

您可以按如下方式进行转换: Key = Key if Key != 'Null' else None

【讨论】:

    【解决方案2】:

    我想这里的问题是你在占位符周围加上引号。看看我认为如何做到这一点。

    query_update = 'update table set Name = {name}, Key = {Key} where Id = {id}'
    query_update.format(name='myname', Key = 'mykey', Id = 123)
    stmt.execute(query_update)
    conn.commit()
    

    【讨论】:

      【解决方案3】:

      不要使用动态 SQL。使用适当的参数化查询

      # test data
      name = "Gord"
      key = None  # not a string
      id = 1
      
      query_update = "update table_name set Name = ?, Key = ? where Id = ?"
      stmt.execute(query_update, name, key, id)
      conn.commit()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-22
        • 1970-01-01
        • 2014-03-16
        相关资源
        最近更新 更多