如何将 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 字符串变量的一部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Python 3 字节字符串变量转换为常规字符串? [复制]

如何将 sqlite3 模块添加到 Python?

Pytho核心编程笔记——第三章

如何将变量添加到 Python plt.title?

如何将整数迭代附加到python中的字符串中?

Python如何将RGB图像转换为Pytho灰度图像?