python - SQLAlchemy中的VALUES子句

标签 python sql sqlalchemy

有没有一种方法可以在SQLAlchemy中构建Query对象,该对象等同于:

SELECT * FROM (VALUES (1, 2, 3)) AS sq;

根据我在文档中看到的内容,VALUES子句仅与INSERT一起使用。

最佳答案

插入中的“VALUES”是标准SQL,独立的“VALUES”关键字是Postgresql。在PGValues上有一个针对此的快速编译器配方(如果有一天我更改了Wiki,请在此处复制):

from sqlalchemy import *
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql.expression import FromClause
from sqlalchemy.sql import table, column

class values(FromClause):
    def __init__(self, *args):
        self.list = args

    def _populate_column_collection(self):
        self._columns.update(
            [("column%d" % i, column("column%d" % i))
                    for i in xrange(1, len(self.list[0]) + 1)]
        )

@compiles(values)
def compile_values(element, compiler, asfrom=False, **kw):
    v = "VALUES %s" % ", ".join(
        "(%s)" % ", ".join(compiler.render_literal_value(elem, None) for elem in tup)
        for tup in element.list
    )
    if asfrom:
        v = "(%s)" % v
    return v

if __name__ == '__main__':
    t1 = table('t1', column('a'), column('b'))
    t2 = values((1, 0.5), (2, -0.5)).alias('weights')
    print select([t1, t2]).select_from(t1.join(t2, t1.c.a==t2.c.column2))

关于python - SQLAlchemy中的VALUES子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18858291/

相关文章:

python - 需要将字符串与Python文件中的行进行匹配

python - 为什么 Django django.contrib.auth.authenticate 需要就地参数?

mysql - 在包含 10 亿行的表中查找重复条目

历史表状态中的 SQL 查询

flask - 您可以并行运行多个 Flask SQLAlchemy 查询吗?

python - 为 windows 配置 sqlalchemy

python - 错误: "Your deployment does not have an associated swagger.json" - ACI deployment on Stream Analytics Job

SQL Order By : Specific Value First, 然后排序?

python - 如何使用 SQLAlchemy 在 Postgres 数据库中创建包含 UUID 列的表?

python - Geopandas 没有属性 hvplot