zoukankan      html  css  js  c++  java
  • 博客的数据库从sqlite迁移到mysql

    背景

    (这是导入的之前个人博客上的文章)
    之前的服务器挂了,换了一个windows的暂时使用。
    配置比较低,也是嫌麻烦,不打算直接在虚拟机上安装mysql,而是用新账号申请了一个1元试用1个月的mysql数据库。

    不过区域没选对,不能和虚拟机直接访问,只能通过公网ip,不过关系不大,也能用,又不是跑高端业务~

    数据库打算从本地的sqlite换成mysql(话说blog文字都是存在字段里,是否mongodb这种的会比较好呢。。。)

    搜索

    在网上搜了一下如何迁移,SO上这个问题migrating my SQLite database to mysql提供了脚本转换sql的方法,不过试了一下,不是很好用。
    而且博客里的文字中,有一些特殊字符也会被替换。

    不过原始问题中这个回答倒是启发了我,直接通过.net的ORM库进行转换。

    实践

    首先创建mysql数据库,这里我利用了原始项目的migration创建(其实似乎可以不要的)。

    然后新建一个工程用以迁移数据库,具体操作就是新建两个DbContext代表原始数据库和目标数据库,然后把每个DbSet遍历拷贝即可,逻辑很简单,只要配好使用的数据库provider和ConnectionString。

    		public static async Task MirgrateAsync()
            {
                using (var src = new AppDbContextSrc())
                {
                    using (var dst = new AppDbContextDst())
                    {
                        //author
                        Console.WriteLine("Reading Authors from src...");
                        var authors = await src.Authors.ToListAsync();
                        Console.WriteLine("Writing Authors to dst...");
                        await dst.Authors.AddRangeAsync(authors);
    
                        //blogposts
                        Console.WriteLine("Reading BlogPosts from src...");
                        var posts = await src.BlogPosts.ToListAsync();
                        Console.WriteLine("Writing BlogPosts to dst...");
                        await dst.BlogPosts.AddRangeAsync(posts);
                        Console.WriteLine("Being Commit");
                        await dst.SaveChangesAsync();
                        Console.WriteLine("End Commit");
                        Console.WriteLine("====================================================");
    
                        //customfields
                        Console.WriteLine("Reading CustomFields from src...");
                        var cust = await src.CustomFields.ToListAsync();
                        Console.WriteLine("Writing CustomFields to dst...");
                        await dst.CustomFields.AddRangeAsync(cust);
    
                        //htmowidgets
                        Console.WriteLine("Reading HtmlWidgets from src...");
                        var widgets = await src.HtmlWidgets.ToListAsync();
                        Console.WriteLine("Writing HtmlWidgets to dst...");
                        await dst.HtmlWidgets.AddRangeAsync(widgets);
    
                        //newsletters
                        Console.WriteLine("Reading Newsletters from src...");
                        var nl = await src.Newsletters.ToListAsync();
                        Console.WriteLine("Writing Newsletters to dst...");
                        await dst.Newsletters.AddRangeAsync(nl);
    
                        //users
                        Console.WriteLine("Reading Users from src...");
                        var users = await src.Users.ToListAsync();
                        Console.WriteLine("Writing Users to dst...");
                        await dst.Users.AddRangeAsync(users);
    
                        Console.WriteLine("Being Commit");
                        await dst.SaveChangesAsync();
                        Console.WriteLine("End Commit");
                        Console.WriteLine("====================================================");
                    }
                }
            }
    

    一开始拷贝完成忘了调用SaveChangesAsync结果没有保存。。。

  • 相关阅读:
    pandas 之 set_index
    python string 之 format
    python 数组反序的方法
    python之dict
    python string 之 format, join, split
    Kalman Filter
    python 读取 xlsx
    python pandas 对各种文件的读写 IO tools
    Sorting Rows In pandas Dataframes
    python---time 相关, str 转timestamp
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/12608732.html
Copyright © 2011-2022 走看看