我可以使用 RedBean PHP ORM 导出 Sqlite 数据库并导入到 MySQL 吗?

Posted

技术标签:

【中文标题】我可以使用 RedBean PHP ORM 导出 Sqlite 数据库并导入到 MySQL 吗?【英文标题】:Can I export a Sqlite db using RedBean PHP ORM and Import to MySQL? 【发布时间】:2016-04-10 00:14:01 【问题描述】:

我有一个简单的网络应用程序,我一直在使用redbean php 构建它,它的结构非常简单,包含三种 bean 类型:

区域 建筑物 人

所有关系都是排他的 1:Many。所以,Person 只属于 1 个Building,而Building 属于 1 个Area

Area
  BuildingList
    PersonList

目前,为了便于开发,我一直在使用Sqlite3 进行开发,但我想将数据移动到mysql。我已经添加了很多数据。

有没有一种简单的方法可以使用 RedBean 将所有 bean 导出到新的 MySql 数据库?

我知道我可以搜索 sqlite -> MySQL/MariaDB 转换器,但我也可能希望能够反向使用它来使迁移站点超级容易移动/备份/更改数据库。

我在下面尝试了什么:

R::setup('sqlite:/' . __DIR__ . '/data/database.db'); 
R::addDatabase('mysql', $MySqlConn );

$old_datas = R::findAll( 'area' );
R::selectDatabase( 'mysql' );

foreach ($old_datas as $bean) 
    $new_area = R::dispense('area');
    $new_area->importFrom( $bean );
    $id = R::store( $new_area );
    var_dump( $new_area ); // shows new data


var_dump( R::findAll( 'area' ) ); // returns empty array

【问题讨论】:

你试过exportAll()中提到的redbean docs吗? exportAll() 很棒,并且可以使用递归添加到 MySQL 数据库。我并没有在这条路上走得太远,但看起来我越来越有可能不得不像这样手动编写函数来完成它。 我可以推荐Fregata(免责声明:我是作者)吗?如果您愿意,可以使用 demo project 和 MySQLPostgreSQL 示例迁移。它与 ORM/数据库无关,虽然有一个集成的 Doctrine DBAL 外键迁移系统,但您可以忽略它。我从未与 RedBean 合作过,但如果您有具体要求,我很乐意写详细的答案。 【参考方案1】:

我会先说我个人没有尝试这样做,但是由于您可以通过 sqlite3 控制台转储整个数据库,所以我的第一种方法是这样做,然后尝试导入该文件进入 MySQL。

从 sqlite 控制台转储一个 sqlite3 数据库:

sqlite> output database_dump.sql sqlite> .dump sqlite> .quit

将 .sql 文件导入 MySQL(如 here 所述):

mysql> use DATABASE_NAME mysql> source path/to/file.sql

【讨论】:

以上是关于我可以使用 RedBean PHP ORM 导出 Sqlite 数据库并导入到 MySQL 吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Redbean PHP ORM 时,是不是必须在每个脚本中调用 R::freeze()?

不将 php-redbean 的属性保存到数据库

预打包的 Redbean 仅获取一个(最后一个)行

如何在 PHP 中使用 ORM

RedBean ORM ID 列

RedBean PHP:有没有办法保护数据库列不被更改? (例如:插入日期)