我正在Django中重新创建一个运行在服务器上的web应用程序,但是它被终止了,幸运的是,我备份了所有的代码。我的问题来自于数据库,因为我不知道如何将旧的db.sqlite3 Django数据库web应用程序中的所有数据转移到新的应用程序中。
我发现了一个类似于我的Django:将数据从一个数据库传输到另一个数据库的问题,但是用户希望从特定的列中传输数据,因为他们来自旧数据库和新数据库的models.py略有不同。在我的例子中,来自旧数据库和新数据库的models.py是相同的。
替代品
DB Browser for SQLite来探索旧数据库的内容,我可以手动地将每一行添加到Django管理中,但是这将花费我太多的时间。db.sqlite并在新的web应用程序中替换它,因为models.py文件保持不变,但是这个解决方案不合适,这个解决方案很粗鲁,而且我认为它违背了软件的良好实践。如何将数据从旧数据库传输到新数据库?
发布于 2018-01-20 21:05:02
为了解决我的问题,我做了一些小技巧,因为没有一个简单的功能可以让您从Django中的两个sqlite数据库中传输所有数据。以下是我所做的技巧:
sqlite db browser,在.csv文件中探索并导出旧数据库的内容。使用sqlite db browser打开数据库并点击tables选项,您将看到所有的表,然后右键单击其中的任何一个,然后按export as a csv file选项生成csv文件(name_of_your_csv_file.csv)。另一种选择是使用sqlite3.exe在cmd或powershell中打开数据库,然后用以下方式进行导出:
.tables #这使您可以探索模式csv输出name_of_your_csv_file.csv上可用的表头2.到目前为止,有两种选择:您可以将一次插入所有记录放到新数据库中,也可以将现有表从新数据库中删除,然后重新创建它们并导入.csv文件。我选择了跳伞,因为有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文件的第一行没有插入,因为它包含从旧数据库导出的数据的头。
发布于 2018-01-17 05:05:14
这似乎是一个数据库到另一个数据库的一次复制。我不认为这与良好的软件实践背道而驰,除非您必须频繁地复制这个数据库。我以前在迁移服务器时就这样做过,假设应用程序的两个实例是相同的构建,它不会引起任何问题。
https://stackoverflow.com/questions/48293399
复制相似问题