在Flask应用中使用测试peewee数据库实例

埃雷兹·埃斯科(Erez Eshkol)

我想使用测试数据来运行我的网站(当前正在使用Flask服务器运行)。我正在使用从测试中初始化的peewee数据库代理。我的模型是:

database_proxy = Proxy()


class MySQLModel(Model):
    """ A base model that will use our MySQL database """

    class Meta:
        database = database_proxy


class Person(MySQLModel):
    id = PrimaryKeyField(primary_key=True)
    name = CharField()

在测试期间,我创建了一个新的内存数据库:

test_db = SqliteDatabase(':memory:')

并初始化模型的数据库:

database_proxy.initialize(test_db)
if database_proxy.is_closed():
    database_proxy.connect()
Person.create_table()

然后,我创建数据,并运行我的Flask服务器:

app = Flask(__name__)
app.run(debug=True)

我的一条路线选择了我数据库中的所有人员。但这引发了一个异常,表示表Person不存在。对于好奇的人,该函数是:

@app.route("/api/people")
def list_people():
    ppl = models.Person.select(models.Person.id).dicts().execute()
    [ ... formatting and returning a json ... ]

如果我在服务器外运行相同的查询,那当然可以。

我通过调试并查看模型Person在测试和flask函数中都使用了相同的SqliteDatabase对象,来确保我的Flask应用程序使用了相同的数据库实例(我检查了内存地址是否相同)。

这里发生了什么?在烧瓶中查询数据时,数据在哪里?

示例调试运行:

[运行app.run()之前

>>> models.Person.get()
<database.models.Person object at 0x7f8dde8e09d0>
>>> models.Person._meta.database.obj
<peewee.SqliteDatabase object at 0x7f8dde8e0190>

[在app.run()之后

* Debugger is active!
 * Debugger pin code: 327-505-347
127.0.0.1 - - [03/May/2016 16:36:12] "GET / HTTP/1.1" 200 -
... Loads more pages ...
>>> models.Person._meta.database.obj
<peewee.SqliteDatabase object at 0x7f8dde8e0190>
>>> models.Person.get()
Traceback (most recent call last):
  File "/home/q/Software/pycharm-2016.1.2/helpers/pydev/_pydevd_bundle/pydevd_exec.py", line 3, in Exec
    exec exp in global_vars, local_vars
  File "<input>", line 1, in <module>
  File "/home/q/dev/dev/venv/local/lib/python2.7/site-packages/peewee.py", line 4505, in get
    return sq.get()
  File "/home/q/dev/dev/venv/local/lib/python2.7/site-packages/peewee.py", line 2885, in get
    return next(clone.execute())
  File "/home/q/dev/dev/venv/local/lib/python2.7/site-packages/peewee.py", line 2932, in execute
    self._qr = ResultWrapper(model_class, self._execute(), query_meta)
  File "/home/q/dev/dev/venv/local/lib/python2.7/site-packages/peewee.py", line 2628, in _execute
    return self.database.execute_sql(sql, params, self.require_commit)
  File "/home/q/dev/dev/venv/local/lib/python2.7/site-packages/peewee.py", line 3461, in execute_sql
    self.commit()
  File "/home/q/dev/dev/venv/local/lib/python2.7/site-packages/peewee.py", line 3285, in __exit__
    reraise(new_type, new_type(*exc_args), traceback)
  File "/home/q/dev/dev/venv/local/lib/python2.7/site-packages/peewee.py", line 3454, in execute_sql
    cursor.execute(sql, params or ())
OperationalError: no such table: person
埃雷兹·埃斯科(Erez Eshkol)

我没有深入研究peewee的实现,但是我猜是这个问题是由peewee中的某种线程管理机制引起的,至少对于Sqlite内存DB而言。也许它将内容保留在TLS中。

使用文件数据库而不是内存数据库可以解决此问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何配置 SQLite 数据库以在 Flask 应用程序中使用

来自分类Dev

在Flask中使用SQLAlchemy创建数据库

来自分类Dev

在内存数据库中使用Spring Boot测试

来自分类Dev

在Heroku上的Django应用中使用外部数据库

来自分类Dev

是否在phonegap应用程序中使用数据库?

来自分类Dev

如何使用Peewee查询几个类似的数据库?

来自分类Dev

与peewee一起使用多个数据库

来自分类Dev

使用python peewee orm预取数据库行

来自分类Dev

Android应用测试-如何使用真实数据库测试DAO层?

来自分类Dev

在使用预定义领域数据库的不同活动中使用领域实例

来自分类Dev

如何使用Flask-Testing创建测试数据库

来自分类Dev

使用 peewe 和 PyTest 测试 Flask-Security 时数据库不会改变

来自分类Dev

如何在所需的PHP文件中使用Illuminate数据库实例

来自分类Dev

在多个数据库实例中使用Hibernate-search

来自分类Dev

如何在所需的PHP文件中使用Illuminate数据库实例

来自分类Dev

在数据库连接类中使用共享实例的优势

来自分类Dev

如何使用Play Java在注入测试中在内存数据库中使用

来自分类Dev

设置数据库以在Flask中进行测试

来自分类Dev

如何在Django中使用不同的数据库引擎进行测试和生产

来自分类Dev

如何在Django中使用不同的数据库引擎进行测试和生产

来自分类Dev

在测试和生产中使用不同的数据库

来自分类Dev

Peewee和数据库继承

来自分类Dev

Peewee和数据库继承

来自分类Dev

Peewee 不创建数据库

来自分类Dev

使用Flask-Restful从应用程序上下文获取数据库连接

来自分类Dev

使用 SQLAlcehmy 的 Flask 应用程序:如何检测提交到数据库的外部更改?

来自分类Dev

为多实例应用组织Firebase数据库

来自分类Dev

使用多个旧数据库测试Django应用程序

来自分类Dev

使用第二个数据库测试Yii REST应用程序

Related 相关文章

  1. 1

    如何配置 SQLite 数据库以在 Flask 应用程序中使用

  2. 2

    在Flask中使用SQLAlchemy创建数据库

  3. 3

    在内存数据库中使用Spring Boot测试

  4. 4

    在Heroku上的Django应用中使用外部数据库

  5. 5

    是否在phonegap应用程序中使用数据库?

  6. 6

    如何使用Peewee查询几个类似的数据库?

  7. 7

    与peewee一起使用多个数据库

  8. 8

    使用python peewee orm预取数据库行

  9. 9

    Android应用测试-如何使用真实数据库测试DAO层?

  10. 10

    在使用预定义领域数据库的不同活动中使用领域实例

  11. 11

    如何使用Flask-Testing创建测试数据库

  12. 12

    使用 peewe 和 PyTest 测试 Flask-Security 时数据库不会改变

  13. 13

    如何在所需的PHP文件中使用Illuminate数据库实例

  14. 14

    在多个数据库实例中使用Hibernate-search

  15. 15

    如何在所需的PHP文件中使用Illuminate数据库实例

  16. 16

    在数据库连接类中使用共享实例的优势

  17. 17

    如何使用Play Java在注入测试中在内存数据库中使用

  18. 18

    设置数据库以在Flask中进行测试

  19. 19

    如何在Django中使用不同的数据库引擎进行测试和生产

  20. 20

    如何在Django中使用不同的数据库引擎进行测试和生产

  21. 21

    在测试和生产中使用不同的数据库

  22. 22

    Peewee和数据库继承

  23. 23

    Peewee和数据库继承

  24. 24

    Peewee 不创建数据库

  25. 25

    使用Flask-Restful从应用程序上下文获取数据库连接

  26. 26

    使用 SQLAlcehmy 的 Flask 应用程序:如何检测提交到数据库的外部更改?

  27. 27

    为多实例应用组织Firebase数据库

  28. 28

    使用多个旧数据库测试Django应用程序

  29. 29

    使用第二个数据库测试Yii REST应用程序

热门标签

归档