sql >> データベース >  >> RDS >> PostgreSQL

SQLAlchemyを使用したデータベース関数の名前付きパラメーター

    MichaelBayerの提案 に感​​謝します 、私は自分の質問に対する解決策を思いつきました。秘訣はを使用することです。 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. mysql_fetch_arrayはすべての行を追加しますか?

    2. 動的に生成されたピボットテーブルを一時テーブルに入れる

    3. Windows7へのOrafce.sql3.0のインストール

    4. PDO sqlsrv:ドライバーが見つかりませんでした