sqlalchemy:无法在拆卸时删除数据库

2024-05-04

我正在尝试使用 pytest 进行 sqlalchemy,但遇到以下问题

@pytest.fixture(scope='function')
def my_session(my_db, request):
    from my.models import Session, Base

    Base.metadata.bind = my_db
    Base.metadata.create_all()

    def teardown():
        Base.metadata.drop_all()
        Base.metadata.create_all()
    request.addfinalizer(teardown)
    Session.configure(bind=my_db)

    return Session()

但由于某种原因,之前测试时存储到数据库的数据仍然存在。我有点期待它在 .drop_all() 调用后消失:(


我在使用 SqlAlchemy 1.4 时遇到了这个问题。

我可以使用SqlAlchemy 实用程序封装为Base.metadata.drop_all()真的没有帮助。

相反,我使用了该函数drop_database() https://sqlalchemy-utils.readthedocs.io/en/latest/database_helpers.html#drop-database, then create_database() https://sqlalchemy-utils.readthedocs.io/en/latest/database_helpers.html#create-database重建它。

当心drop_database会真正销毁它,而不仅仅是删除元数据。整个数据库将消失,您甚至无法连接到它。

在尝试下面的代码之前,请确保您确实正在使用测试环境!

另请注意,出于同样的原因,它可能会相当慢,特别是如果您在每次测试后都调用拆卸。

from sqlalchemy_utils.functions import create_database, drop_database
from my.models import Session, Base

@pytest.fixture(scope='function')
def my_session(my_db, request):
    url = my_db.url
    Base.metadata.bind = my_db
    Base.metadata.create_all()

    def teardown():
        # Dropping...
        drop_database(url)
        
        # Recreating...
        create_databse(url)
        Base.metadata.create_all()
    
    request.addfinalizer(teardown)
    Session.configure(bind=my_db)

    return Session()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlalchemy:无法在拆卸时删除数据库 的相关文章

随机推荐

  • ant + yuicompressor 路径错误

    我有一个文件C Bin test js我想压缩并重命名测试 min js my ant 构建 xml看起来像这样
  • 在不滚动的情况下对 UITableViewCell 的高度变化进行动画处理

    我知道如何使用此处所示的方法对 UITableViewCell 的高度变化进行动画处理 当 UITableViewCell 被选中时 你能用动画来改变高度吗 https stackoverflow com questions 460014
  • 设置 CMake OBJECT 库的输出目录

    在我的 CMake 文件中 我指定了一个对象库 add library core OBJECT sourcefiles 我在共享库中进一步引用了这组目标文件 add library sharedlib SHARED
  • Passenger 无法识别本地安装的 gem,可使用打包的 gem

    这是一个生产服务器 我已经安装了 Passenger 并且大部分情况下都可以正常工作 然而 我总是必须将宝石与项目打包在一起 如果不这样做 我会收到以下错误消息 Missing the Rails 2 3 8 gem Please gem
  • logback 消息字段可以被截断/修剪为 n 个字符吗?

    有时会看到巨大的日志消息 并且并不总是能够 轻松 自动换行 有没有办法截断 message比如说 80 个字符logback xml 看一下格式修饰符部分 From http logback qos ch manual layouts ht
  • 如何给DArray的元素设置值?

    我正在探索 Julia 的并行计算并尝试了以下方法 a dzeros 5 a 1 5 但刚刚收到此错误 setindex not defined for DArray Float64 1 Array Float64 1 嗯 我以为手册上说s
  • 如何在存储过程中调用存储过程(带2个参数)?

    我有具有相同参数 服务器名称和日期 的存储过程 我想编写一个存储过程并在该 SP 中执行它们 称为 SP All CREATE PROCEDURE dbo SP All AS BEGIN exec sp 1 myDate datetime
  • IEEE-754 32 位(单精度)指数 -126 而不是 -127

    我知道我是否有这样的号码 1 1001 0001 0011 0011 0000 0001 0101 000 1 sign bit 8 bit biased exponent 23 bit fraction mantissa 我可以通过从有偏
  • Math.random 生成多少熵?

    我想生成一个非常大的随机数 我不需要这个号码来保证加密安全 因此 我没有使用crypto getRandomValues https developer mozilla org en US docs Web API RandomSource
  • 处理原始 HTTP 请求内容

    我正在 ASP NET 中做一个电子商务解决方案 它使用PayPal 网站支付标准 https www paypal com IntegrationCenter ic standard home html服务 除此之外 我还使用他们提供的服
  • 使用 Git 和 Eclipse 管理 Android 项目

    我相信我有一个非常常见的问题 它会影响具有多个应用程序版本的开发人员 在我的例子中 我有两个 付费版本和免费版本 为了管理这两个版本 我使用具有 2 个不同分支的同一个 git 项目 免费和付费 然而 我的源代码包名称彼此不同 如预期 并且
  • 如何在neo4j中显示屏幕上的所有节点

    我有近 5000 个节点Recipes和 5 个节点Meal Types在 Neo4j 数据库中 目前他们之间没有任何关系 我正在下面运行 CQL MATCH n RETURN n LIMIT 100000 这运行良好 但它返回与相关的节点
  • 投影 3D 网格的 2D 轮廓算法

    给定 一个 3D 网格 由一组顶点和三角形定义 并用这些点构建网格 问题 找到任意平面上投影的任意旋转网格的二维轮廓 投影很容易 挑战在于找到平面中投影三角形边的 外壳 我需要一些有关研究该算法的输入 指针的帮助 为简单起见 我们可以假设
  • 在opencv中发现凸性缺陷? [根据给定的输入图像崩溃..]

    我有一个计算图像凸包的程序 我正在尝试使用此信息来计算fingers存在于输入图像中 从一些冲浪中我发现做到这一点的方法 数手指 是 寻找轮廓 凸包 凸性缺陷 但我在使用凸性缺陷函数时遇到了麻烦 它编译得很好 但在运行时程序会因某些输入图像
  • Linux 中不使用 C++ 的 C 异常处理

    Linux 是否提供了 C 语言的异常处理而不求助于 C 或者 实现此类异常处理的最佳方法是什么 目标是避免检查每个调用的函数的返回码 而是执行类似于 C 的线程安全且易于移植的操作 您可以通过为其编写信号处理程序来处理信号 GNU 记录的
  • gettext 中的“msgstr”有多个“msgid”

    是否可以制作两个或多个msgids匹配一个msgstr 例如 两者 列表 空 and 你正在接近gettext以错误的方式 它是如何工作的 msgid每个条目都需要 msgctxt是可选的 用于区分两个msgid内容相同但翻译可能不同的记录
  • 将 Recyclerview 与 DiffUtil.ItemCallback 一起使用不会滚动到顶部?

    我会搜索项目 每次从服务器获取时 当我搜索 o 时 它起作用 然后 ot 它再次起作用 作为 o 搜索的结果 我有 20 个项目 如果是 ot 我有 10 个项目 这是这 20 个项目的一部分 我确实删除了 EditText 中的 t 它显
  • 如何将 model.summary() 保存到 Keras 中的文件?

    有model summary 方法 https keras io models about keras models 在喀拉斯 它将表打印到标准输出 是否可以将其保存到文件中 如果您想要摘要的格式 您可以传递print功能为model su
  • 如何从 Grails 应用程序的 URL 中删除应用程序名称?

    我有一个应用程序在这样的 URL 上运行 http myapp mydomain com myapp http myapp mydomain com myapp 我不想要 myappURL 中的部分 那么如何去掉应用程序名称呢 我只想 ht
  • sqlalchemy:无法在拆卸时删除数据库

    我正在尝试使用 pytest 进行 sqlalchemy 但遇到以下问题 pytest fixture scope function def my session my db request from my models import Se