【问题标题】:Data loss in Django - SQLiteDjango 中的数据丢失 - SQLite
【发布时间】:2012-07-17 15:47:13
【问题描述】:

我正在使用的堆栈:Ubuntu 64bit - Django (1.4) - SQLite(不记得我安装了这个,但我认为它随 Ubuntu 或 Django 一起提供) - uwsgi(1.2.3 服务器) - Nginx (1.1.19) - Extjs (4.1)

我已经使用 Django 大约 2 个月了,过去 40 天左右,在三个不同的场合,我发现我的 SQLite 数据库中的所有表都是空的(我可以写截断但我不知道原因)。

它正在进行中,因此我(偶尔)重塑模型并运行 manage.py syncdb(可能每天一次),但正如我所读的那样,syncdb 不会截断或删除任何表。我必须经常重启 uwsgi 服务器(每隔一条语句),因为它缓存了应用程序。

我主要专注于客户端部分,因此数据库非常简单,到目前为止只有几个表和零关系。

还有其他人遇到过这种不当行为吗?

【问题讨论】:

    标签: django sqlite


    【解决方案1】:

    你应该开始使用 South http://south.aeracode.org/

    【讨论】:

    • 除了 South 可能有用之外,您知道这与我正在经历的数据丢失有任何关联吗?
    • Syncdb 不会处理您对模型所做的任何更改,数据丢失似乎是一个非常合乎逻辑的结果,您做错了
    • Django 文档:第一部分:Syncdb 不会更改现有表 syncdb 只会为尚未安装的模型创建表。它永远不会发出 ALTER TABLE 语句来匹配安装后对模型类所做的更改。对模型类和数据库模式的更改通常涉及某种形式的歧义,在这些情况下,Django 必须猜测要做出的正确更改。在此过程中存在丢失关键数据的风险。
    • 第二部分:如果您对模型进行了更改并希望更改数据库表以匹配,请使用 sql 命令显示新的 SQL 结构并将其与现有表模式进行比较以解决变化。
    • Jup 你对模型所做的每一次更改都需要你创建一个脚本来迁移你的数据,这是非常不切实际的,这就是南方让你的生活变得轻松的地方:-)
    猜你喜欢
    • 2012-10-14
    • 2014-03-20
    • 1970-01-01
    • 2020-10-01
    • 2013-02-04
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多