PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. काम करने के लिए सरल पोस्टग्रेएसक्यूएल इंसर्ट नहीं मिल सकता है

  2. Sysbench का उपयोग करके PostgreSQL के प्रदर्शन को बेंचमार्क कैसे करें

  3. मैं sql या phpPgAdmin का उपयोग करके PostgreSQL डेटाबेस के लिए डेटाबेस एन्कोडिंग कैसे बदल सकता हूँ?

  4. Homebrew का उपयोग करके मैक पर Postgresql के साथ PHP स्थापित करें

  5. मैं पिछले गैर-शून्य मान को कुशलतापूर्वक कैसे चुनूं?