【问题标题】:Syntax for SQL via python script (Incorrect syntax near ',')通过 python 脚本的 SQL 语法(',' 附近的语法不正确)
【发布时间】:2021-02-24 19:05:19
【问题描述】:

我正在使用 SQL Server,需要通过 Python 脚本运行以下 SQL

SELECT DISTINCT LEN(Wav)-CHARINDEX('.', Wav) FROM <>;

我尝试过使用字符串,但不知道如何解决点字符。

sql = 'SELECT DISTINCT LEN(Wav)-CHARINDEX({}, Wav) FROM xxx'.format('.')
print(sql)

cursor = conn.cursor()
cursor.execute(sql)

知道如何解决这个问题

谢谢

【问题讨论】:

  • 你能把你在你的问题中得到的确切错误写出来吗?
  • 另外,我建议使用双引号:"SELECT DISTINCT LEN(Wav)-CHARINDEX('.', Wav) FROM &lt;&gt;;"
  • 谢谢大家的帮助。

标签: python python-3.x


【解决方案1】:

'.'是字符串.,你想要"'.'",字符串'.'

>>> print("{}".format('.'))
.
>>> print("{}".format("'.'"))
'.'

作为 @Justin Ezequiel 的回答说明,请注意此处的 SQL 注入!

具体来说,未经过滤的用户输入可能并将导致 SQL 注入,其中意外的命令可以通过破坏原始字符串来针对目标数据库运行。这些可以做任何您的连接有权做的事情,例如检索、修改或删除任意数据

传统的方法是使用prepared statements

在 Python 中,如果您必须使用任意字符串,您还可以使用正则表达式或其他测试来显式错误地处理带有控制字符 (if not re.match(r"^[a-zA-Z\d _+-]+$"), s):raise_) 或 use (trust) an escaping library to do it for you 的语句。

【讨论】:

  • 你能澄清一下你应该为这个特定的代码做什么吗?我完全不明白你的回答。
  • @M-Chen-3 ahah - 我添加了一个显示最终字符串的示例!
【解决方案2】:

使用参数避免SQL-injection attacks

sql = 'SELECT DISTINCT LEN(Wav)-CHARINDEX(?, Wav) FROM xxx' # note placeholder (?)
print(sql)
params = ('.',) # tuple

cursor = conn.cursor()
cursor.execute(sql, params)

【讨论】:

  • 这有一个关于注射的非常有价值的观点,并提供了一个很好的解决方案,但并没有真正重视这个问题的危险性!
猜你喜欢
  • 1970-01-01
  • 2018-06-26
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多