在这里,我试图将来自函数的附加值包含在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
类。Templates
python
中提供更简单的字符串替换。模板支持基于$
的替换,而不是正常的基于%
的替换。
例如:
>>> 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注入和动态创建这些查询的危险。有许多图书馆将以安全的方式为您完成。但我有一种感觉/希望这无论如何都不会出现在生产代码中。