PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Наименувани параметри във функции на база данни с SQLAlchemy

Благодарение на предложението на Майкъл Байер , измислих решение на собствения си въпрос:номерът е да използвам Компилаторът на SQLAlchemy и малко правилно екраниране:

from psycopg2.extensions import adapt as sqlescape                          
import sqlalchemy                                                           
from sqlalchemy import select                                               
from sqlalchemy.ext.compiler import compiles                                
from sqlalchemy.sql.expression import ColumnClause                          


class MyFunc(ColumnClause):                                                 
    def __init__(self, *args, **kwargs):                                    
        self.kwargs = kwargs                                                
        super().__init__(*args)                                             


@compiles(MyFunc)                                                           
def compile_myfunc(element, compiler, **kw):                                
    s = ','.join("%s:=%s" % (k, sqlescape(v)) for k, v in element.kwargs.items())
    return "%s(%s)" % (element.name, s)                                     


def call(engine, func, **kwargs):                                           
    return engine.execute(select([MyFunc(func, **kwargs)]))                 


engine = sqlalchemy.create_engine('postgresql+psycopg2://[email protected]/mytest')
print(call(engine, 'test_f', a='a').scalar())                               
print(call(engine, 'test_f', b='b').scalar())                               



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да импортирам модули или да инсталирам разширения в Postgres?

  2. postgresql комбинира няколко периода в един

  3. грешка при кодиране на знаци rodbc с PostgreSQL

  4. Изчислени / изчислени / виртуални / извлечени колони в PostgreSQL

  5. Състояние на SQL:42883, нито една функция не съответства на даденото име и типове аргументи. Но тази функция действително съществува