如何将 Python 字符串变量添加到 Python 中 SQL 字符串变量的一部分?
Posted
技术标签:
【中文标题】如何将 Python 字符串变量添加到 Python 中 SQL 字符串变量的一部分?【英文标题】:How to add a Python string variable to part of a SQL string variable in Python? 【发布时间】:2018-03-27 22:04:09 【问题描述】:我正在使用 Python 和 SQLAlchemy 执行 Redshift SQL 查询。我将要执行的 SQL 定义为 Python 字符串 我想创建一些额外的 Python 字符串变量,这些变量将成为 SQL 字符串的一部分。例如,在下面的示例中,SQL 查询中的表名可以由 python 变量“table_string”加上表名本身的其余部分构建。在此示例中,生成的表名将是“test_table_name”。
table_string = 'test_'
create_test_sql_string_python='''
begin;
create table 'table_string'+'table_name'
(id int not null, name varchar(40), date timestamp);
end;
'''
execute(sa.text(create_test_sql_string_python).execution_options(autocommit=True))
我在 R 中做了类似的事情,我想知道这可能是什么 python 等价物。这是 R 示例:
table_string <- 'test_'
dbSendQuery(redshift,paste0("begin;
create table ",table_string,"table_name
(id int not null, name varchar(40), date timestamp);
end;"))
【问题讨论】:
【参考方案1】:可以使用.format
方法(参见PyFormat Documentation)。在你的情况下,它看起来像这样:
table_string = 'test_'
create_test_sql_string_python='''
begin;
create table 0table_name
(id int not null, name varchar(40), date timestamp);
end;
'''.format(table_string)
将0
放在字符串中将替换.format()
中的第一个参数,它可以有多个参数。
【讨论】:
我认为"table_name"
是一个错字。点赞;你打败了我(尽管我们有不同的文档):)
从 R 代码示例和说结果表名应该是“test_table_name”的问题我知道变量 table_string 只是一个前缀
对不起,我的意思是代表 OP 打错字。但是对于红移,具体来说,我不能确定。如果您必须有 "table_name"
来限定您指定的内容,我会感到惊讶,但我可能错了。
谢谢你们俩。这行得通。我有一种情况,我最终需要在 SQL 变量字符串中使用几个不同的变量字符串。试图避免修改任何实际的 SQL,并且在运行整个过程之前,只在 python 文件的顶部有一个要更改的变量列表。还没有那么远,但这肯定会有所帮助。【参考方案2】:
我无法评论 SQL 语句本身,但您可以在此处使用format
传递变量。
字符串看起来像:
"""
begin;
create table (id int not null,
name varchar(40),
date timestamp);
end;
""".format(table_string)
【讨论】:
以上是关于如何将 Python 字符串变量添加到 Python 中 SQL 字符串变量的一部分?的主要内容,如果未能解决你的问题,请参考以下文章