我正在尝试从MySQL数据库导出一些数据并将其导入PostgreSQL数据库。这两个模型如下所述:
class Location(models.Model):
name = models.CharField(max_length=100)
class Item(models.Model):
title = models.CharField(max_length=200)
location = models.ForeignKey(Location)
class Book(Item):
author = models.CharField(max_length=100)
请注意,Book
模型继承自Item
模型。 (另外,我确实认识到author
确实应该是一个单独的模型 - 但我需要一些简单的东西来证明这个问题。)我首先尝试使用dumpdata
命令从模型中导出数据:< / p>
./manage.py dumpdata myapp.location >locations.json ./manage.py dumpdata myapp.item >items.json ./manage.py dumpdata myapp.book >books.json
items.json
中的JSON看起来像这样:
{
"fields": {
"title": "Introduction to Programming",
"location": 1
},
"model": "myapp.item",
"pk": 1
}
books.json
中的JSON看起来像这样:
{
"fields": {
"author": "Smith, Bob"
},
"model": "myapp.book",
"pk": 1
}
我可以毫无问题地导入locations.json
和items.json
,但只要我尝试导入books.json
,就会遇到以下错误:
IntegrityError: Problem installing fixture 'books.json': Could not load myapp.Book(pk=1): null value in column "location_id" violates not-null constraint
编辑: myapp.books
的架构(根据PostgreSQL本身)如下:
# SELECT * FROM myapp_book; item_ptr_id | author -------------+-------- (0 rows)
答案 0 :(得分:1)
books.json文件需要包含父模型的所有字段,在您的情况下,需要添加(来自items.json文件)'title'和'location'字段(当然还有适当的值)。 loaddata不使用数据库结构(中间表和所有),但检查模型的实际字段。
为了避免以双重条目结束,您还必须删除items.json文件中myapp_book表中原始mysql数据库所指向的所有json条目。
另一种解决方案是使用http://pypi.python.org/pypi/py-mysql2pgsql(另请参阅this question)
答案 1 :(得分:0)
似乎无论出于什么原因,postgres db中的Books架构与模型不匹配 - 它有一个location_id列。您应该删除该表并重新运行syncdb。