我經歷過:
- Python中的錯誤“以前的SQL不是查詢”?
- MSSQL2008 - Pyodbc - 以前的 SQL 不是查詢
- 如何檢查結果集是否為空?
然而,他們都沒有解決這個問題。
我的 db.py 檔案中的片段如下:
result = cursor.execute(self.sql,self.params)
if result is None:
self.data = []
else:
self.data = [dict(zip([key[0] for key in cursor.description], row)) for row in result.fetchall()]
cnxn.close()
return self.data
這適用于我拋出的每個 SQL 和存盤程序,除了這個
seq = request.form['seq']
s = 'EXEC sp_add ?, ?'
p = (udf.get_username(), int(seq))
l = Conn.testing(db="testingDatabase",sql=s,params=p)
我得到錯誤:
Previous SQL was not a query
SQL:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE sp_add
@user nvarchar(50),
@seq int
AS
BEGIN
SET NOCOUNT ON;
insert into tblName (userCol,seqCol) VALUES (@user,@seq)
END
GO
存盤程序運行并插入行,但出現錯誤。
我所做的是:
result = cursor.execute(self.sql,self.params)
cnxn.close()
return str(result)
這將回傳:
EXEC sp_add ?, ?
為什么它會回傳那個?為什么它會回傳我剛剛傳遞給它的陳述句?
在我的 SP 中,如果我在SELECT宣告上添加標簽,那么問題就會消失。
除了剛才提到的黑客之外,還有什么建議嗎?
uj5u.com熱心網友回復:
根據 Python 資料庫 API PEP 249 規范,cursor.execute沒有定義的回傳值。所以像 pyodbc 這樣的 DB-API 不需要定義一致的回傳值。
但是,特別是對于 pyodbc,如果物件包含一個值,則cursor.execute()回傳一個<pyodbc.Cursor>維護該屬性的物件,但如果是一個操作命令則將是:descriptionNone
result = cursor.execute(self.sql, self.params)
if result.descripton is None:
self.data = []
else:
self.data = [
dict(zip([key[0] for key in cursor.description], row))
for row in
result.fetchall()
]
cnxn.close()
return self.data # METHODS INSIDE CLASSES DO NOT REQUIRE RETURN
甚至考慮一個三元運算子:
result = cursor.execute(self.sql, self.params)
self.data = (
[
dict(zip([key[0] for key in result.description], row))
for row in result.fetchall()
]
if result.descripton is not None
else []
)
cnxn.close()
return self.data
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439581.html
標籤:Python sql服务器 python-3.x 烧瓶 pyodbc
