- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
已升级到最新的 Cx_Oracle 版本(5.1.3 到 7.1.3),现在我的所有代码都损坏了。尝试传递游标时似乎出现了问题。
def select_query_remy(self,sql,params=None):
with cx_Oracle.connect(self.connection) as con:
cur = con.cursor()
if params:
cur.execute(sql,params)
else:
cur.execute(sql)
#print cur.fetchall()
return cur
我在 fetchall 中得到了正确的数据,所以我知道它正在正确连接并返回有效结果。所以我把它注释掉了。
在我调用它的其他脚本中,行现在应该正确存储光标吗?
rows = con.select_query_remy(sql)
当我从另一个脚本fetchall()
时,我得到下面的错误。
print rows.fetchall()
cx_Oracle.DatabaseError: DPI-1039: statement was already closed
有什么想法吗?
完整的 db.py
import cx_Oracle
class db:
list ={}
def __init__(self):
'''
AMFM Python DB connectors
'''
db.list["disprod"] = [999,"disprod.prod.com"]
db.list["prodqry"] = [999,"prodqry.prod.com"]
db.list["amfmprod"] = [999,"amfmprod.prod.com"]
db.list["esriprod"] = [999,"esriprod.prod.com"]
db.list["amfmtest"] = [999,"amfmtest.prod.com"]
db.list["amfmdev"] = [999,"CCTdAMFM.prod.com"]
db.list["amfmtran"] = [999,"amfmtran.prod.com"]
def setup(self,env, username, password):
self.username = username
self.password = password
self.env = env
self.port = db.list[env][0]
self.ip = db.list[env][1]
if env == "prodqry":
self.env = "prodqry.world"
elif env == "amfmprod":
self.env = "amfmprod.world"
elif env == "esriprod":
self.env = "esriprod.world"
else:
self.env = env
self.connection = self.username+"/"+self.password+"@"+self.ip+":"+str(self.port)+"/"+self.env
def select_query_remy(self,sql,params=None):
with cx_Oracle.connect(self.connection) as con:
cur = None
cur = con.cursor()
if params:
cur.execute(sql,params)
else:
cur.execute(sql)
return cur
在另一个 python 中,我创建了一个新的数据库并尝试取回光标。
con = db()
con.setup("xxx","user","password")
rows = con.select_query_remy(sql)
print rows.fetchall()
结果:
Traceback (most recent call last):
File "C:\Python27\ArcGIS10.5\test\test.py", line 30, in <module>
print rows.fetchall()
cx_Oracle.DatabaseError: DPI-1039: statement was already closed
如果我返回 fetchall(),数据就会出现。当我传递光标本身时,会发生错误。
def select_query_remy(self,sql,params=None):
with cx_Oracle.connect(self.connection) as con:
cur = None
cur = con.cursor()
if params:
cur.execute(sql,params)
else:
cur.execute(sql)
#return cur
return cur.fetchall()
为什么我不能像过去那样传递光标?有什么想法吗?
最佳答案
我在查询 Oracle 数据库时遇到了这条错误消息。我相信如果数据库中有 LOB(大对象)就会发生这种情况,而在我查询过的所有 Oracle 数据库中都不是这种情况。
由于我使用 Jupyter 进行原型(prototype)设计,所以我更喜欢使用上下文管理器 (with) 语句,如果我必须在单独的单元格中添加 .close() 语句,这会使操作查询结果变得更加困难。
我的解决方法实际上是使用内置的 deepcopy
函数(我尝试使用 .copy()
但这也不起作用。任何进一步的操作/显示数据产生了同样的错误。
所以我给你的解决方案如下:
from copy import deepcopy
import cx_Oracle
def select_query_remy(self,sql,params=None):
with cx_Oracle.connect(self.connection) as con:
cur = con.cursor()
if params:
cur.execute(sql,params)
else:
cur.execute(sql)
#print cur.fetchall()
return deepcopy(cur.fetchall())
如果我遇到的是同一个问题,我相信这应该可以解决您的问题。
关于python - cx_Oracle.DatabaseError : DPI-1039: statement was already closed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56443269/
我为此苦了一个星期。我正在尝试运行一个使用即时客户端版本11.2.0.3.0与远程Oracle数据库连接的python flask应用程序。 在遇到许多问题之后,我结束了使用3个buildpack,其
以下语句中字典中的 bindind 日期有问题吗?? mySQL = 'SELECT day_key FROM timeday WHERE calendar_date =:calendar' args
我尝试在 Ubuntu 上使用 crontab 运行 python scrapy 爬虫,但收到以下错误消息: Traceback (most recent call last): File "/u
我正在使用 Amazon Work Space,并且我使用 VPN 通过 SSH Ubuntu 16.04 实例进行连接。我使用 python 来连接 Oracle 数据库 11g,我需要使用 cx_
在我的 Python 代码中,当我要求用户输入一个字符串以进行 SELECT 时,它起作用了,但是当我尝试使用相同输入的 UPDATE 时,不允许我执行 这是连接成功后的代码 curs = conne
在我的 Python 代码中,当我要求用户输入一个字符串以进行 SELECT 时,它起作用了,但是当我尝试使用相同输入的 UPDATE 时,不允许我执行 这是连接成功后的代码 curs = conne
我正在尝试使用 python 中的 cx_Oracle 连接到 oracle 数据库。我能够连接到数据库并提取数据。 现在我正在尝试连接到另一个数据库,我必须首先调用安全过程,然后只有我才能看到基础表
对于我创建的 Oracle 表 MYTABLE,我有一个列 COL1,它被声明为 NUMBER(20,3);小数点后可以有 3 位有效数字。当我在此表上运行 cx_Oracle 游标时: cursor
我正在使用 web.py 从 Oracle 创建一个简单的报告页面。当我采用使用 vars= 传递参数的最佳实践方法时,延迟为 11-12 秒。当我使用字符串替换执行相同的查询时,查询会在不到一秒的时
我正在尝试在 python 中使用 cx_Oracle 并行运行完全独立的 Oracle 查询。 我可以通过为每个线程设置一个新的数据库连接,然后在每个单独的线程中运行查询来成功地完成这项工作,这使总
为什么下面的代码不起作用?它返回零行,即使我有很多匹配搜索条件的行。 select * from Table_1 形式的简单查询工作正常并返回正数行 import cx_Oracle def func
在最新版本的 python 中,可以使用类似 with open('abc.txt') as f: 的东西来保证文件被关闭,即使在以下(缩进)中发生异常) 代码块。我想知道这种技术是否也适用于 cx_
我正在使用 cx_oracle python 库来查找过去 90 分钟内具有 ModifiedDate 的任何记录。 import cx_Oracle import datetime from dat
我正在尝试连接到 Oracle 数据库,但出现以下错误: curcon = cx_Oracle.connect(conn_str) cx_Oracle.DatabaseError: ORA-12170
我正在运行... SQL*Plus: Release 9.2.X.X.X - Production on Wed Jun 22 13:02:14 2011 Copyright (c) 1982, 20
Code Oracle: Procedure example ( p_Cod_Rspta out varchar2 , p_e
在 Java DataSource 中实现了一个用于数据库访问的 Java 范例。该对象围绕数据库连接的创建创建了一个有用的抽象。 DataSource 对象保留数据库配置,但只会根据请求创建数据库连
我正在使用 cx_Oracle 访问我们的数据库。我希望用户能够输入电台 ID,例如: stationID=(无论用户在提示时输入什么) cursor.execute('''select cruise
为了演示 Oracle 的安全特性,必须在用户 session 尚未建立时调用 OCIServerVersion() 或 OCIServerRelease()。 同时具有数据库参数 sec_retur
我正尝试在 Oracle 10 数据库中再次执行此操作: cursor = connection.cursor() lOutput = cursor.var(cx_Oracle.STRING) cur
我是一名优秀的程序员,十分优秀!