问题标签 [legacy-database]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
853 浏览

mysql - 在 django 中迁移到旧数据库会出错

背景信息: 我是 django 的初学者,更好地配备了 python 和 mysql(以及 mariaDB)的初学者。我在以下版本的 Windows 7 环境中工作:

  • django 1.9.1
  • 玛丽亚数据库 10.0.20
  • Python 3.4.4
  • mysql-connector\Python 2.1.3 用于 Python 3.4

目标: 我正在尝试使用 django 为其构建 mariaDB 数据库和基于 Web 的用户界面。我已经预先在 mysql 中构建了数据库,现在我正在尝试使用这个数据库作为遗留数据库来创建 django 项目。

问题: 我已将模型检索到我的 django 项目中,如下所示:

它工作得很好。也检查了models.py,它们看起来应该是这样。

现在,如果我尝试迁移以创建基于 django 的表到我的旧数据库,如下所示:

我不断收到大量嵌套错误,最后一个是:

我认为该表在之前的尝试中留在了我的数据库文件夹中,但删除它并没有帮助。即使我从数据库命令提示符检查剩下的唯一表是我的数据库的本地表,仍然会弹出相同的错误消息。在某些时候,我想知道我使用的连接器是否存在问题,因为它不是推荐的连接器(mysqlclient)。

在某个地方,我发现甚至不需要迁移。这显然会救我,但我不知道,如果这是我可以寻求的解决方案。理想情况下,数据库稍后将在线管理,拥有管理员帐户的用户可以在那里添加条目。否则,数据库应该只返回数据。

编辑:修复了 python manage.py inspectdb > models.py 行的错误消息

编辑 29.1。 运行迁移:

导致相同的错误。

即使在删除 django 项目并重新启动后,问题仍然存在。

编辑 v2 29.1。 数据库文件夹中的 django_migrations 表只有一个必需的表文件。应该有 django_migrations.ibd 和 django_migrations.frm。但是,运行迁移后,只有一个文件:django_migrations.ibd。

这里发生了类似的事情,不同的文件 mysqldump 问题与恢复错误:'请在 IMPORT 之前丢弃表空间'。所选答案中对此进行了很好的解释。

我认为这与我的问题有关,但无法弄清楚有什么帮助以及如何处理。

编辑 v3 29.1。 最后我注意到文件给出了 django 错误。它是 django 的迁移记录器,位于第 59 行的 C:\Python34\lib\site-packages\django\db\migrations\recorder.py。

引发错误的最后一行是第 59 行。有趣的是,如果表存在,该函数应该可以工作。我唯一能想到的(就像我之前的编辑一样),确实由于某种原因,在迁移过程中没有创建 frm 文件。

为什么会发生这种情况超出了我的范围。

0 投票
0 回答
627 浏览

python - 旧数据库的 django dumpdata

当我在使用 django 时尝试从我的旧数据库 (managed=False) 转储数据时收到此错误消息。

python manage.py dumpdata --database legacy_db

CommandError:无法序列化数据库:(1146,“表 'legacy_db.django_content_type' 不存在”)

我确实需要将遗留数据放在夹具中以进行测试。有没有办法解决它?

0 投票
1 回答
633 浏览

django - django项目中的多个主键与旧数据库

在我的 django 项目中,我正在使用旧数据库,它有一个包含多个主键的表。save()当我在某些模型实例上调用方法时,我面临着 Django ORM 错误地构造 SQL 查询的问题。

例如,我有以下模型:

我得到这样的模型实例:mytable_instance = MyTable.objects.all()[0]. 然后我想修改那个实例:

然而,Django ORM 执行这个查询:

field_2这是不正确的,因为它将field_3为所有行my_table设置新值field_1 = 123

我怎样才能克服这个问题?我需要这样的 SQL 查询:

编辑:完整代码

遗留数据库表的模型:

查询:

但是我需要:

0 投票
1 回答
257 浏览

domain-driven-design - 重写软件时如何处理遗留数据完整性问题?

我正在开发一个重写现有遗留软件的项目。旧版软件主要由 SQL 数据库上的 CRUD 操作(创建、读取、更新、删除)组成。

尽管是基于 CRUD 的编码风格,但遗留软件非常复杂。这种软件复杂性不仅是问题域本身复杂性的结果,也是糟糕(并且经常近乎疯狂)设计决策的结果。这种糟糕的编码导致数据库中的数据缺乏完整性。这些完整性问题不仅在关系(外键)方面,而且在单行内的完整性方面。例如,“x”列的含义与“y”列的含义完全矛盾。(在您问之前,答案是“是”,我已经分析了问题域并正确理解了这些列的含义和目的,并且似乎比原来的软件开发人员更好)。

在编写替代软件时,我使用了域驱动设计和命令查询职责分离的原则,主要是由于域的复杂性。例如,我设计了聚合根以在写入模型中强制执行不变量,命令处理程序执行“交叉聚合”一致性检查,查询处理程序以适合各种屏幕的方式查询有意去规范化的数据等。

就准确性和易用性而言,替换软件在输入新数据时运行良好。在这方面,它是成功的。但是,由于现有数据充满了完整性问题,涉及现有数据的操作经常会因抛出异常而失败。这通常是因为无法从存储库中读取聚合,因为传递给构造函数的数据违反了聚合的不变量。

我应该如何处理这些“违反规则”的遗留数据。旧软件在这方面运行良好,因为它几乎没有进行验证。由于缺乏验证,没有经验的用户很容易输入无意义的数据(而有经验的用户变得非常有价值,因为他们多年理解它的“特质”)。

数据本身很重要,不能丢弃。我能做些什么?我已经尝试在进行过程中解决完整性问题,这在某些情况下有效,但在其他情况下几乎是不可能的(例如,由于原始开发人员决定不保存数据,因此数据库中完全丢失了数据)。数据完整性问题的绝对数量是压倒性的。

我能做些什么?

0 投票
2 回答
6302 浏览

mysql - 在带有遗留数据库的 django 项目中使用复合主键

我有一个旧数据库,其中一些表包含复合主键。我通过运行manage.py inspectdb命令得到的模型是这样的。

我可以正常获取数据。但是,当我想save()在某个模型实例上运行命令时,就会出现问题。django 执行的查询不正确。例如:

但是我需要:

由于 django 不支持复合主键,那么解决该问题的最佳解决方案是什么?请注意,它是旧数据库表,它没有AutoField.

编辑:添加旧表结构

0 投票
0 回答
469 浏览

sql-server-2008 - 使用 MSSQLSERVER 在 Liquibase 中创建变更日志

您好我正在使用带有 SQL Server 2008 项目的 Liquibase (www.liquibase.org) 来管理数据库迁移/更改。使用以下 liquibase 命令时,我收到错误“运行 Liquibase 时出现意外错误:文件过早结束。

liquibase udpate

PFB 我的 liquibase.properties 文件:

你能建议我如何摆脱这个过早的文件错误结束吗?

0 投票
2 回答
1874 浏览

python - 如何在 Django 中实现多值属性?

我有一个包含以下表格的旧数据库:

电话号码

每个人都可以有零个或多个电话号码,这是个人实体的多值属性。

我尝试使用 Django 的 inspectdb 命令生成以下 models.py:

但是,当我尝试保存 PhoneNumbers 的新实例时,Django 返回以下错误消息:

显然 Django 期望电话号码的表有一个代理键。由于电话号码表不是实体,因此它在我的旧数据库中没有代理键。请注意,电话号码表的主键是其所有列的组合。

如何将这些表映射到 Django 的模型中,以便它与我的旧数据库一起使用?

0 投票
1 回答
45 浏览

sql - 我不熟悉如何将旧的 SQL 连接命令转换为现代代码。*=/ =*

我一直在做一个小项目,可以这么说,其中包括大量的代码改造。我对旧的 sql 连接符号有基本的了解,其中大部分是我从 stackoverflow 中获得的,但是我注意到周围的很多结构与我所熟悉的非常不同。就将其转换为现代 SQL 代码而言,我基本上对设置类似于此的代码感到困惑。我想让这与其他人相关,但我认为大多数软件会在几年前更新。任何建议将不胜感激。

0 投票
0 回答
81 浏览

java - 对遗留数据应用 XSS 策略

我们的遗留应用程序最初设计为允许为可定制页面存储任何 html 标签。此类页面的想法是存储客户需要的任何 html,然后在某些时候有可能呈现此 html 数据。

这种方法允许用户存储任何 XSS。我们当前的目标是定义和执行不允许存储任何 XSS 的策略。

我们根据一些预定义的规则研究了几种能够清理 html 的方法:

但是这两种方法都是基于消毒而不是验证。所以基本场景可能如下所示:

  1. 用户输入一些数据来输入
  2. 用户输入被清理并检查与原始(初始 - 步骤 1)用户输入是否相等。
  3. 如果有任何差异,则认为验证失败。

这种方法适用于新数据。如果是遗留数据,我们会遇到几个问题:

  1. 如果用户遗留数据包含禁止元素,用户将无法保存稍微修改过的 html 内容版本。
  2. 以下流程会使用户感到困惑:
    1. 用户编辑包含与新定义的策略有关的禁止标签/内容的旧数据。
    2. 用户替换所有内容并保存。
    3. 用户出于某种原因决定恢复到旧版本
    4. 不允许用户保存以前的版本,因为它包含禁止的标签/内容。

于是出现以下问题:

  1. 验证恶意 html 元素和 XSS 向量的用户输入的最佳方法是什么?
  2. 哪种方法可用于解决遗留数据的上述问题?
0 投票
1 回答
542 浏览

django - 带有遗留数据库的 Django - 如何使用数据库序列?

给定一个使用此 SQL 查询创建的数据库表:

我必须将它与 Django ORM 一起使用,所以我有运行inspectdb命令。它是自动生成的代码:

将其保存到应用程序models.py文件并运行迁移后,一切都很好。我可以像使用 ORM 创建数据库一样读取数据库。但是,在 Bill 表中创建行时存在问题。

比尔模型的简单形式:

问题是我无法检索使用 DB 序列生成的 ID。将id字段添加到表单将不起作用,因为我们必须使用代码生成它,然后作为参数传递。即使数据库将创建不同的 ID,如果没有原始查询,这些 ID 将无法检索。