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

Các tham số được đặt tên trong các hàm cơ sở dữ liệu với SQLAlchemy

Cảm ơn đề xuất của Michael Bayer , Tôi đã nghĩ ra một giải pháp cho câu hỏi của riêng mình:mẹo là sử dụng Trình biên dịch của SQLAlchemy và một số cách thoát thích hợp:

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. Có thể tồn tại hai bảng tạm thời có cùng tên trong các truy vấn riêng biệt không

  2. Không thể chèn hàng bằng Hibernate nếu sử dụng dấu ngoặc kép

  3. wal_keep_searies tại sao lại tối thiểu, không phải tối đa?

  4. [] chuỗi thành jsonb với Gorm và postgres

  5. Đóng kết nối cơ sở dữ liệu trong Laravel 5.1