【问题标题】:How to add a Python string variable to part of a SQL string variable in Python?如何将 Python 字符串变量添加到 Python 中 SQL 字符串变量的一部分?
【发布时间】: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;"))

【问题讨论】:

    标签: python r sqlalchemy pycharm amazon-redshift


    【解决方案1】:

    可以使用.format 方法(参见PyFormat Documentation)。在你的情况下,它看起来像这样:

    table_string = 'test_'
    
    create_test_sql_string_python='''
    begin;
    create table {0}table_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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 2012-02-23
      • 2023-03-12
      • 2015-11-14
      • 2017-09-09
      • 1970-01-01
      相关资源
      最近更新 更多