如何在 python 中将函数中的单引号中的附加值括入 sql 字符串中



在这里,我试图将来自函数的附加值包含在python中的sql字符串中 但不知何故,我做不到。

getname正在返回普鲁

def getValue(getname):
sql= '''SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = '''+getname

我想以这种形式在单引号中返回它

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = 'Puru'

以下是实现所需目标的三种方法:

字符串串联

sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = '"+getname+"'"

string.format((

sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = '{}'".format(getname)

格式字符串(需要 Python 3.6+(

sql = f"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = '{getname}'"

除了str.format()之外,python还提供了string模块中的Template类。Templatespython中提供更简单的字符串替换。模板支持基于$的替换,而不是正常的基于%的替换。
例如:

>>> from string import Template
>>> sql = Template("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES "
"WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = '$getname'")
>>> sql.substitute(getname='Puru')
"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = 'Puru'"

$getname命名与映射键"getname">匹配的替换占位符。但我建议您使用str.format()方法,该方法更具可读性并广泛用于python中的字符串格式。

您需要将'''替换为"。否则Python将不知道如何解释中间的'。如果您不希望该行太长,则可以在括号中括起来:

sql = ("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES "
"WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = ") + getname

编辑:我必须指出SQL注入和动态创建这些查询的危险。有许多图书馆将以安全的方式为您完成。但我有一种感觉/希望这无论如何都不会出现在生产代码中。

最新更新