- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个数据库模式,可以在各种不同的数据库引擎中实现(假设我将使用 pyodbc 连接到一个 MS Access 数据库,或者我将通过内置的 sqlite3 连接到一个 SQLite 数据库模块作为一个简单的例子)。
我想创建一个工厂函数/方法,它根据某些参数返回适当类型的数据库连接,类似于以下内容:
def createConnection(connType, params):
if connType == 'sqlite':
return sqlite3.connect(params['filename'])
elif connType == 'msaccess':
return pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ={};'.format(params['filename']))
else:
# do something else
现在我有一些查询代码应该适用于任何连接类型(因为无论底层数据库引擎如何,模式都是相同的)但可能会抛出一个我需要捕获的异常:
db = createDatabase(params['dbType'], params)
cursor = db.cursor()
try:
cursor.execute('SELECT A, B, C FROM TABLE')
for row in cursor:
print('{},{},{}'.format(row.A, row.B, row.C))
except DatabaseError as err:
# Do something...
我遇到的问题是来自每个 DB API 2.0 实现的 DatabaseError 类不共享一个公共(public)基类(除了太通用的异常),所以我不知道如何捕捉这些一般异常(exception)。显然我可以做类似下面的事情:
try:
# as before
except sqlite3.DatabaseError as err:
# do something
except pyodbc.DatabaseError as err:
# do something again
...我为每个可能的数据库引擎包含了一个明确的 catch block 。但这对我来说显然是非 pythonic 的。
如何从不同的底层 DB API 2.0 数据库实现中捕获 DatabaseError?
最佳答案
有很多方法:
使用包罗万象的异常,然后找出它是什么异常。如果它不在您的列表中,请再次提出异常(或您自己的)。请参阅:Python When I catch an exception, how do I get the type, file, and line number?
也许您想以不同的方式解决问题:您的工厂代码还应该提供要测试的异常。
我认为(也是我在实践中使用的方法)的一种更简单的方法是为所有数据库连接创建一个类,并为每个特定的数据库类型/语法将其子类化。继承使您可以处理所有特殊性。出于某种原因,我从来不必担心这个问题。
关于python - 一般捕获 python DatabaseErrors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40188916/
在启用 SSL 的 postgresql 数据库上使用 celery 时有时会触发标题错误。我在 flask + SQLAlchemy 配置中 最佳答案 正如这里提到的:https://github.
嗨,我有一个使用 Celery Flask SqlAlchemy 的设置,但我间歇性地收到此错误: (psycopg2.DatabaseError) SSL error: decryption fa
我正在尝试在 heroku 上部署一个 flask 应用程序,该应用程序在 Celery 中使用后台任务。我已经实现了 application factory pattern这样 celery 进程就
我的 sqlite db 文件是这样的:无法打开数据库文件 我关闭了所有文件夹,直到我的 dbfile 成为根目录。但我仍然收到此错误。但我记得在服务器上创建我的 django 项目时,我创建了一个
我有一个数据库模式,可以在各种不同的数据库引擎中实现(假设我将使用 pyodbc 连接到一个 MS Access 数据库,或者我将通过内置的 sqlite3 连接到一个 SQLite 数据库模块作为一
我的 Django 应用程序中有一个 Celery 任务调用函数,它处理 CSV 文件中的每一行,并尝试使用模型将每一行的信息插入到 PostgreSQL 数据库中,如下所示: reader = cs
情况是这样的:我在我的事件表中添加了一个新列(演示者)。我运行了 alter table sql 语句,运行了 python manage.py syncdb。我试图能够选择许多配置文件并将它们存储为
我在使用 Django 1.2.4 时遇到问题。 这是一个模型: class Foo(models.Model): # ... ftw = models.CharField(blank
每次我过滤/排除十进制字段时,我都会收到一条数据库错误消息: "cant' adapt" 这不会发生在我的本地环境中。 我在生产环境中使用 Postgresql 8.3.11,在本地环境中使用 8.4
有没有办法获取相关的表名和列名,而不仅仅是这条消息? django.db.utils.DataError: value too long for type character varying(16)
所以我克隆了我的 repo,找到它的来源,在它的依赖项上运行 pip 并同步我的数据库,只有同步失败: DatabaseError: no such table: django_site 我检查了 s
我正在尝试开发一个迷你购物网站,其中我使用 NodeJs Express 和 MySQL 来完成此操作 我的购物车可以有很多产品,每个产品可以属于多个购物车。 因此使用sequelize,我的关系如下
我已经问过这个问题一次但没有得到答案,我已经阅读了我可以在 Internet 上找到的发生此错误的每个示例,所以我将再次尝试在这里获取更多信息。 我正在尝试:克隆一个远程存储库,然后我将在我的开发机器
我正在设置一个 Django 模型来存储地区,例如美国、德国等。我为表格设置了唯一的地区名称。我有一个从列表中填充数据库的脚本,如果有重复的区域名称 IntegrityError 将按预期抛出,但随后
如何修复 Django 数据库错误。我将 MongoDB 与 Djongo 结合使用。 直到最近我决定添加 NewApp 时,一切都运行良好。每当我尝试迁移时,它都会用 django.db.utils
我正在将 Firebase 实时数据库中的数据调用到 Android 中,但出现以下错误:“W/SyncTree:在/Datas 上监听失败:DatabaseError:权限被拒绝” 我的规则设置为:
我正在尝试使用带有多个处理器的 django-nose 来运行我们的测试套件,以减少运行时间。所有测试通过 1 个处理器,但使用多个处理器会产生 DatabaseError: server close
我正在运行以下代码: db = pymysql.connect(host=host, database=db_name, user=user, password=password) batchsize
我已经为非常简单的博客应用编写了几个测试,但是当我运行测试时多对多关系失败了:./manage.py test myblog DatabaseError: no such table: myblog_
我收到了一个需要用 Python 读取的 sqlite 文件。 我可以使用“DB Browser for SQLite”应用程序打开文件。我可以看到表结构并在该应用程序中执行选择语句。所以文件看起来没
我是一名优秀的程序员,十分优秀!