当前位置: 首页 > 面试题库 >

SQLAlchemy中的VALUES子句

何楷
2023-03-14
问题内容

有没有一种方法可以Query在SQLAlchemy中构建与以下对象等效的对象:

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

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


问题答案:

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

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))


 类似资料:
  • 问题内容: 我最近才刚开始使用SQLAlchemy,但仍无法解决某些概念。 归结为基本元素,我有两个这样的表(通过Flask-SQLAlchemy): 我将如何查询用户列表及其最新帖子(不包括无帖子的用户)。如果我使用的是SQL,则可以执行以下操作: 因此,我确切地知道“期望的” SQL可以达到我想要的效果,但是不知道如何在SQLAlchemy中“正确地”表达它。 编辑:如果很重要,我使用的是SQ

  • 问题内容: 我正在尝试在sqlalchemy中执行此查询 我想在执行时绑定列表。 问题答案: 怎么样 编辑 :没有ORM,它将是 需要两个参数,第一个是要检索的字段列表,第二个是条件。您可以通过(或)属性访问表对象上的所有字段。

  • 问题内容: 有没有一种方法可以使SQLAlchemy使用自定义列生成查询,该自定义列是与当前行相关的子查询: 使用ORM API? 我正在使用PostgreSQL 9.3和旧版本的SQLAlchemy 0.9.8 问题答案: 如果您经常需要这样做,并且/或者计数是模型不可或缺的一部分,则应该使用混合属性,如其他答案中所述。另一方面,如果只需要一个查询就可以使用,则可以使用或创建标量子查询: 子查询

  • 描述 (Description) 此函数返回HASH中包含的所有值的列表。 在标量上下文中,返回将返回的值的数量。 使用相同的迭代器,因此使用每个和键函数使用的顺序。 语法 (Syntax) 以下是此函数的简单语法 - values HASH 返回值 (Return Value) 此函数返回标量上下文中的哈希值和列表上下文中的值列表中的值的数量。 例子 (Example) 以下是显示其基本用法的

  • 返回表示Map中的值的可迭代对象。 语法 (Syntax) Map.values 例子 (Example) void main() { var details = {'Usrname':'tom','Password':'pass@123'}; print(details.values); } 它将产生以下output - (tom, pass@123)

  • 此方法用于返回地图中的所有值。 语法 (Syntax) values(map) 参数 (Parameters) map1 - 这是需要返回所有值的映射。 返回值 (Return Value) 返回地图中的值列表。 例如 (For example) -module(helloworld). -export([start/0]). start() -> Lst1 = [{"a",1}