第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Flask-SQLAlchemy應(yīng)用程序中執(zhí)行原始SQL

如何在Flask-SQLAlchemy應(yīng)用程序中執(zhí)行原始SQL

慕絲7291255 2019-08-30 14:33:07
如何在SQLAlchemy中執(zhí)行原始SQL?我有一個python web應(yīng)用程序,它運行在燒瓶上,并通過SQLAlchemy與數(shù)據(jù)庫連接。我需要一種方法來運行原始SQL。該查詢涉及多個表連接以及內(nèi)聯(lián)視圖。我試過了:connection = db.session.connection()connection.execute( <sql here> )但我不斷收到網(wǎng)關(guān)錯誤。
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻1998條經(jīng)驗 獲得超6個贊

你有沒有嘗試過:


result = db.engine.execute("<sql here>")

要么:


from sqlalchemy import text


sql = text('select name from penguins')

result = db.engine.execute(sql)

names = [row[0] for row in result]

print names


查看完整回答
反對 回復 2019-08-30
?
手掌心

TA貢獻1942條經(jīng)驗 獲得超3個贊

SQL Alchemy會話對象有自己的execute方法:


result = db.session.execute('SELECT * FROM my_table WHERE my_column = :val', {'val': 5})

您的所有查詢都應(yīng)該通過會話對象,無論它們是否是原始SQL。這可確保查詢由事務(wù)正確管理,從而允許將同一請求中的多個查詢作為單個單元提交或回滾。使用引擎或連接走出事務(wù)會使您面臨更大的微妙風險,可能很難檢測到可能導致數(shù)據(jù)損壞的錯誤。每個請求應(yīng)僅與一個事務(wù)相關(guān)聯(lián),并且使用db.session將確保您的應(yīng)用程序的情況。


假設(shè)它是一個SELECT查詢,這將返回一個可迭代的RowProxy對象。


您可以使用各種技術(shù)訪問各個列:


for r in result:

    print(r[0]) # Access by positional index

    print(r['my_column']) # Access by column name as a string

    r_dict = dict(r.items()) # convert to dict keyed by column names

就個人而言,我更喜歡將結(jié)果轉(zhuǎn)換為namedtuples:


from collections import namedtuple


Record = namedtuple('Record', result.keys())

records = [Record(*r) for r in result.fetchall()]

for r in records:

    print(r)

如果您沒有使用Flask-SQLAlchemy擴展,您仍然可以輕松使用會話:


import sqlalchemy

from sqlalchemy.orm import sessionmaker, scoped_session


engine = sqlalchemy.create_engine('my connection string')

Session = scoped_session(sessionmaker(bind=engine))


s = Session()

result = s.execute('SELECT * FROM my_table WHERE my_column = :val', {'val': 5})


查看完整回答
反對 回復 2019-08-30
?
Helenr

TA貢獻1780條經(jīng)驗 獲得超4個贊

docs:SQL表達式語言教程 - 使用文本


例:


from sqlalchemy.sql import text


connection = engine.connect()


# recommended

cmd = 'select * from Employees where EmployeeGroup == :group'

employeeGroup = 'Staff'

employees = connection.execute(text(cmd), group = employeeGroup)


# or - wee more difficult to interpret the command

employeeGroup = 'Staff'

employees = connection.execute(

                  text('select * from Employees where EmployeeGroup == :group'), 

                  group = employeeGroup)


# or - notice the requirement to quote "Staff"

employees = connection.execute(

                  text('select * from Employees where EmployeeGroup == "Staff"'))



for employee in employees: logger.debug(employee)

# output

(0, u'Tim', u'Gurra', u'Staff', u'991-509-9284')

(1, u'Jim', u'Carey', u'Staff', u'832-252-1910')

(2, u'Lee', u'Asher', u'Staff', u'897-747-1564')

(3, u'Ben', u'Hayes', u'Staff', u'584-255-2631')


查看完整回答
反對 回復 2019-08-30
  • 3 回答
  • 0 關(guān)注
  • 3005 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號