sqlalchemy text() 函數


作用:封裝sql字符串

1. 不同數據庫, 可以使用統一的sql參數傳遞寫法. 參數須以:號引出. 在調用execute()的時候, 使用dict結構將實參傳進去.
    from sqlalchemy import text
    result = db.execute(text('select * from table where id < :id and typeName=:type'), {'id': 2,'type':'USER_TABLE'})
2. 如果不指定parameter的類型, 默認為字符串類型; 如果要傳日期參數, 需要使用text()的bindparams參數來聲明
    from sqlalchemy import DateTime
    date_param=datetime.today()+timedelta(days=-1*10)
    sql="delete from caw_job_alarm_log  where alarm_time<:alarm_time_param"
    t=text(sql, bindparams=[bindparam('alarm_time_param', type_=DateTime, required=True)])
    db.execute(t,{"alarm_time_param": date_param})    
    
    參數bindparam可以使用type_來指定參數的類型, 也可以使用 initial 值來指定參數類型
        bindparam('alarm_time_param', type_=DateTime) #直接指定參數類型
        bindparam('alarm_time_param', DateTime()) #使用初始值指定參數類型
3. 如要轉換查詢的結果中的數據類型, 可以通過text()的參數typemap參數指定. 這點比mybatis還靈活,
        t = text("SELECT id, name FROM users",
                typemap={
                    'id':Integer,
                    'name':Unicode
                }
        )
4. 還有其他, 詳見sqlalchemy\sql\expression.py中的docstring.

用法示例:

from sqlalchemy import text
query.filter(text("id>1")).all()
query.filter(Person.id>1).all() #同上
query.filter(text("id>:id")).params(id=1).all() #使用:,params來傳參

query.from_statement(
    text("select * from person where name=:name")).\
    params(name='jack').all()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM