如何在Django中将数据从一个数据库传输到另一个数据库?

时间:2018-01-17 04:01:11

标签: django django-models sqlite

我正在Django中重新创建一个在服务器上运行的Web应用程序,但它终止了,幸运的是,我对所有代码进行了备份。我的问题来自数据库,但我不知道如何将旧的<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul class="test111"> <li><span class="testCont">Another</span><a href="#" class="testmenu">Menu 1</a></li> <li><span class="testCont">Another1</span><a href="#" class="testmenu">Menu 2</a></li> <li><span class="testCont">Another1</span><a href="#" class="testmenu">Menu 3</a></li> </ul> Django数据库Web应用程序中的所有数据传输到新的数据库中。

我发现了与我的Django: transfer data from one database to another类似的问题,但是用户希望从特定列传输数据,因为来自旧数据库和新数据库的db.sqlite3略有不同。就我而言,来自旧数据库和新数据库的models.py是相同的。

替代

  1. 我正在使用models.py来探索旧数据库的内容,我可以手动将每一行添加到Django管理中,但这将花费我太多时间。
  2. 我可以复制旧的DB Browser for SQLite并将其替换为新的网络应用程序,因为db.sqlite文件保持不变但这个解决方案不合适IMO,这个解决方案很粗鲁,我认为它违背了软件的良好实践。
  3. 如何继续将数据从旧数据库传输到新数据库?

2 个答案:

答案 0 :(得分:1)

这似乎是一个db到另一个db的一次性副本。除非你经常要复制这个数据库,否则我不会看到这会违反良好的软件实践。我在迁移服务器之前已经完成了它,并且假设应用程序的两个实例是相同的构建,它不会导致任何问题。

答案 1 :(得分:0)

我能够做一些小技巧来解决我的问题,因为没有一个简单的功能允许你从Django中的两个sqlite数据库传输所有数据。这是我做的伎俩:

  1. 下载sqlite db browser以探索并导出.csv文件中旧数据库的内容。使用sqlite db browser打开您的数据库并点击tables选项,您将看到所有表,然后右键单击其中任何一个并点击export as a csv file选项以生成csv文件(name_of_your_csv_file.csv)。另一种方法是使用sqlite3.execmdpowershell中打开您的数据库,然后执行导出:

    .tables #this lets you explore your available tables 
    headers on
    mode csv
    output name_of_your_csv_file.csv
    
  2. 2.到目前为止有两种选择:您可以insert all the records at once到新数据库,也可以从新数据库中删除现有表,然后重新创建它们并导入.csv文件。 I went for the drop option因为要迁移的记录超过100条。

    # sqlite3
    # check the structure of your table so you can re-create it
    
    .schema <table_name> 
    #the result might be something like CREATE TABLE IF NOT EXISTS "web_app_navigator_table" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "ticket" varchar(120) NOT NULL);
    
    #drop the table 
    drop table web_app_navigator_table
    
    #re-create the table
    create table web_app_navigator_table(id integer not null primary key autoincrement, ticket varchar(120) not null);
    
    #do the import of the csv file
    .import C:/Users/a/PycharmProjects/apps/navigator/name_of_your_csv_file.csv table_name_goes_here
    

    您可能会看到csv:1: INSERT failed datatype mismatch之类的错误,但这表示未插入csv文件的第一行,因为它包含旧数据库中导出数据的标题。