首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python数据库sqlite3

Python数据库sqlite3
EN

Stack Overflow用户
提问于 2017-01-19 10:14:26
回答 1查看 1.6K关注 0票数 3

我有一个小程序,下面是我的代码:

代码语言:javascript
复制
def get_code(hex_pattern, database='./AndroidLockScreenRainbow.sqlite'):
    try:
        if os.path.exists(database):
            with lite.connect(database) as db:
                with db.cursor() as c:
                    c.execute("SELECT * FROM RainbowTable")
                    rows = c.fetchall()
                    for row in rows:
                        if row[0] == hex_pattern:
                            return row[1]
        else:
            raise lite.OperationalError("Database file not exists")
    except lite.OperationalError:
        print('Given SQL table not found!')

当代码以c:的形式使用db.cursor()到达行时,程序会出现以下错误

使用db.cursor()作为c: AttributeError:__exit__

我做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-19 10:36:07

在这种情况下,传递给with语句(db.cursor())的表达式应该返回上下文管理器对象。上下文管理器对象必须同时具有__enter____exit__方法( with语句使用这些方法来确保正确清理对象)。

sqlite3游标对象没有实现这些方法,因此它不是一个有效的上下文管理器方法,因此得到了错误消息。

您可以围绕游标编写自己的上下文管理器。您可以自己编写一个,但在大多数情况下这是不必要的,只需将db.cursor()直接分配给db即可

代码语言:javascript
复制
c = db.cursor()
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41739167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档