如何在没有连接的情况下为 postgres (Redshift) 生成 SQL 查询?

Posted

技术标签:

【中文标题】如何在没有连接的情况下为 postgres (Redshift) 生成 SQL 查询?【英文标题】:How to generate SQL query for postgres (Redshift) without connection? 【发布时间】:2017-10-11 14:45:29 【问题描述】:

我想构建 SQL 查询以传递给spark-redshift 读者的“查询”选项。我正在尝试使用 psycopg2,所以我做了这样的事情:

from psycopg2 import sql

query = sql.SQL(
    "select * from  where event_timestamp < "
).format(
    sql.Identifier("events"),
    sql.Literal(datetime.now())
).as_string()

但它告诉我需要将上下文(连接或光标)传递给as_string()。我不能,因为我没有任何联系。

在这种情况下我应该使用纯字符串格式并进行一些转义吗?

或者有什么方法可以在那里传递一些模拟上下文?为什么它需要连接来构建查询字符串? SQL 查询是否会因连接而异?

【问题讨论】:

【参考方案1】:

我不熟悉 spark,但如果他们没有某种 sql 支持,我会感到惊讶。另一种选择是像sqlbuilder 这样的轻量级包。

如果你真的想使用 psycopg,我建议看看他们如何使用模拟进行单元测试 -- psycopg2's ConnectingTestCase。

class ConnectingTestCase(unittest.TestCase):
    """A test case providing connections for tests.

    A connection for the test is always available as `self.conn`. Others can be
    created with `self.connect()`. All are closed on tearDown.

    Subclasses needing to customize setUp and tearDown should remember to call
    the base class implementations.
    """

【讨论】:

以上是关于如何在没有连接的情况下为 postgres (Redshift) 生成 SQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用对话框的情况下为 C# 项目中的 MySQL 数据库设置连接字符串?

如何在不破坏范式的情况下为多对多关系构建连接表

如何在没有 UINavigationController 的情况下为 detailViewController 视图设置动画?

如何在没有 MediaExtractor 的情况下为 H264 使用 MediaCodec

如何在没有 SDK 的情况下为 webjobs 设置警报

如何使用 postgres 将时间间隔转换为小时数?