2013-10-30 26 views
1

我想从MySQL数据库导出一些数据并将其导入PostgreSQL数据库。这两种模式描述如下:为什么在尝试导入JSON时收到IntegrityError?

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命令导出:

​​

的JSON在items.json看起来是这样的:

{ 
    "fields": { 
     "title": "Introduction to Programming", 
     "location": 1 
    }, 
    "model": "myapp.item", 
    "pk": 1 
} 

的JSON在books.json看起来是这样的:

{ 
    "fields": { 
     "author": "Smith, Bob" 
    }, 
    "model": "myapp.book", 
    "pk": 1 
} 

我可以导入locations.jsonitems.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

我不知道为什么这是downvoted? –

回答

0

似乎无论出于何种原因,您的postgres数据库中的图书架构与模型不匹配 - 它有一个location_id列。您应该删除表并重新运行syncdb。

+0

我已经更新了我的问题与根据PostgreSQL的当前模式。此外,该字段的Django抱怨不在* Book模型中 - 它在'Item'模型中。 –

1

books.json文件需要包含父模型的所有字段,在您的案例'标题'和'位置'字段(当然有适当的值)需要添加(从items.json文件) 。 loaddata不使用数据库结构(中间表和全部),但检查模型的实际字段。

为避免以双重条目结束,您还必须删除myapp_book表中原始mysql数据库指向的items.json文件中的所有json条目。

另一种解决方案是使用http://pypi.python.org/pypi/py-mysql2pgsql(见this question)

相关问题