PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để tạo Dạng xem SQL với SQLAlchemy?

Cập nhật: Xem thêm công thức sử dụng SQLAlchemy tại đây

Theo tôi biết, việc tạo chế độ xem (chỉ đọc không được hiện thực hóa) không được hỗ trợ. Nhưng việc thêm chức năng này trong SQLAlchemy 0.7 rất đơn giản (tương tự như ví dụ tôi đã đưa ra ở đây). Bạn chỉ cần viết một phần mở rộng trình biên dịch CreateView . Với phần mở rộng này, bạn có thể viết (giả sử rằng t là một đối tượng bảng có cộ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

Đây là một ví dụ hoạt động:

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

Nếu muốn, bạn cũng có thể chuyên về một phương ngữ, ví dụ:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quản lý tính khả dụng cao trong PostgreSQL - Phần II:Trình quản lý nhân bản

  2. Tài nguyên đào tạo &học tập hàng đầu về PostgreSQL

  3. rake db:tạo cơ sở dữ liệu ném không tồn tại lỗi với postgresql

  4. NHẬN CHẨN ĐOÁN với câu lệnh SAO CHÉP trong hàm Pl / pgsql

  5. Cấp quyền cho người dùng đối với bất kỳ bảng mới nào được tạo trong postgresql