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

如何使用SQLAlchemy创建SQL视图?

訾雅畅
2023-03-14
问题内容

是否有“ Pythonic”方式(我的意思是,没有“ pure SQL”查询)来使用SQLAlchemy定义SQL视图?


问题答案:

更新:
又见SQLAlchemy的使用配方这里

据我所知,开箱即用不支持创建(只读非实例化)视图。但是在SQLAlchemy
0.7中添加此功能非常简单(类似于我在此处给出的示例)。您只需要编写一个编译器扩展即可
CreateView。使用此扩展名,您可以编写(假设这t是一个带有列的表对象id

createview = CreateView('viewname', t.select().where(t.c.id>5))
engine.execute(createview)

v = Table('viewname', metadata, autoload=True)
for r in engine.execute(v.select()):
    print r

这是一个工作示例

from sqlalchemy import Table
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql.expression import Executable, ClauseElement

class CreateView(Executable, ClauseElement):
    def __init__(self, name, select):
        self.name = name
        self.select = select

@compiles(CreateView)
def visit_create_view(element, compiler, **kw):
    return "CREATE VIEW %s AS %s" % (
         element.name,
         compiler.process(element.select, literal_binds=True)
         )

# test data
from sqlalchemy import MetaData, Column, Integer
from sqlalchemy.engine import create_engine
engine = create_engine('sqlite://')
metadata = MetaData(engine)
t = Table('t',
          metadata,
          Column('id', Integer, primary_key=True),
          Column('number', Integer))
t.create()
engine.execute(t.insert().values(id=1, number=3))
engine.execute(t.insert().values(id=9, number=-3))

# create view
createview = CreateView('viewname', t.select().where(t.c.id>5))
engine.execute(createview)

# reflect view and print result
v = Table('viewname', metadata, autoload=True)
for r in engine.execute(v.select()):
    print r

如果需要,您也可以专门学习方言,例如

@compiles(CreateView, 'sqlite')
def visit_create_view(element, compiler, **kw):
    return "CREATE VIEW IF NOT EXISTS %s AS %s" % (
         element.name,
         compiler.process(element.select, literal_binds=True)
         )


 类似资料:
  • 问题内容: 使用SQLAlchemy,将创建一个Engine对象,如下所示: 如果to参数(在这种情况下为)中指定的数据库不存在,则访问将失败。如果指定的数据库不存在,是否可以告诉SQLAlchemy创建一个新数据库? 问题答案: 在postgres上,通常默认情况下存在三个数据库。如果您能够以超级用户身份(例如,角色)进行连接,则可以连接到或数据库。默认的pg_hba.conf只允许名为unix

  • 问题内容: 使用这样的地理数据记录: 我想输出类似这样的内容,其中它以矩阵形式显示START / END配对: 我可以看到如何以及将如何找到数据,但是我对如何显示为矩阵一无所知。有人有什么想法吗? 问题答案: 这似乎可以解决问题,并在PostgreSQL 9.1上进行了测试。几乎肯定会需要对它进行调整以使其适合SQL Server(任何人都可以随时更新我对此的回答)。 但是请注意,我的输出与您的输

  • 我是vba新手,正在尝试使用vba和Excel创建。 我想创建像下面的图像作为输入表。 我试图添加、、、的行标签,值为、和。不为SHEET1生成任何透视表。

  • 问题内容: 我想在不使用旧版SQL的情况下向现有表中添加一列。 基本的SQL语法是: 我格式化了Google BigQuery的查询: 但是,此错误的语法不正确: 那么,如何正确设置Google BigQuery的SQL格式? 问题答案: BigQuery不支持或其他DDL语句,但是您可以考虑提交功能请求。现在,您需要在BigQuery UI中的表中打开,然后使用“添加新字段”按钮添加该列,或者,

  • 我试图创建一个简单的表,但它给了我一个错误: 剧本: 我想不出这个问题,有人能帮忙吗?

  • 如题,新手,我知道要创建sequence,但是还是报错,代码如下: 提示“Error,ORA-00907:缺失右括号”。不知道为什么?正常应该如何创建自增id的表呢?