Flutter迁移工具插件angel3_migration_runner的使用
Flutter迁移工具插件angel3_migration_runner的使用
本包包含以下数据库的迁移实现。它设计用于与Angel3 ORM配合使用。
- PostgreSQL 10.x 或更高版本
- MariaDB 10.2.x 或更高版本
- MySQL 8.x 或更高版本
使用方法
- 使用
PostgresMigrationRunner
进行 PostgreSQL 数据库迁移。 - 使用
MySqlMigrationRunner
进行 MySQL 和 MariaDB 数据库迁移。此运行器使用mysql_client
驱动。 - 使用
MariaDbMigrationRunner
进行 MariaDB 数据库迁移。此运行器使用mysql1
驱动。
支持的操作
up
- 基于ORM模型生成所有表。reset
- 清除migrations
表中的所有记录并删除所有与ORM相关的表。refresh
- 运行reset
后跟随up
。
限制
- 不支持更新模式更改。
完整示例代码
import 'dart:io';
import 'package:angel3_migration/angel3_migration.dart';
import 'package:angel3_migration_runner/angel3_migration_runner.dart';
import 'package:angel3_migration_runner/mysql.dart';
import 'package:angel3_migration_runner/postgres.dart';
import 'package:angel3_orm/angel3_orm.dart';
import 'package:mysql_client/mysql_client.dart';
import 'package:postgres/postgres.dart';
import 'todo.dart';
void main(List<String> args) async {
// 在PostgreSQL数据库上运行迁移
postgresqlMigration(args);
// 在MySQL数据库上运行迁移
mysqlMigration(args);
}
void postgresqlMigration(List<String> args) async {
var host = Platform.environment['DB_HOST'] ?? 'localhost';
var database = Platform.environment['DB_NAME'] ?? 'demo';
var username = Platform.environment['DB_USERNAME'] ?? 'demouser';
var password = Platform.environment['DB_PASSWORD'] ?? 'demo123';
print("$host $database $username $password");
Connection conn = await Connection.open(
Endpoint(
host: host,
port: 5432,
database: database,
username: username,
password: password),
settings: ConnectionSettings(sslMode: SslMode.disable));
var runner = PostgresMigrationRunner(
conn,
migrations: [
UserMigration(),
TodoMigration(),
FooMigration(),
],
);
runMigrations(runner, args);
}
void mysqlMigration(List<String> args) async {
var host = Platform.environment['MYSQL_HOST'] ?? 'localhost';
var database = Platform.environment['MYSQL_DB'] ?? 'orm_test';
var username = Platform.environment['MYSQL_USERNAME'] ?? 'test';
var password = Platform.environment['MYSQL_PASSWORD'] ?? 'test123';
var mySQLConn = await MySQLConnection.createConnection(
host: host,
port: 3306,
databaseName: database,
userName: username,
password: password,
secure: true);
// 忽略:未使用的局部变量
var runner = MySqlMigrationRunner(
mySQLConn,
migrations: [
UserMigration(),
TodoMigration(),
FooMigration(),
],
);
runMigrations(runner, args);
}
class FooMigration extends Migration {
[@override](/user/override)
void up(Schema schema) {
schema.create('foos', (table) {
table
..serial('id').primaryKey() // 创建一个名为id的自增主键
..varChar('bar', length: 64) // 创建一个名为bar的varchar类型字段,长度为64
..timeStamp('created_at').defaultsTo(currentTimestamp); // 创建一个名为created_at的时间戳字段,默认值为当前时间
});
}
[@override](/user/override)
void down(Schema schema) => schema.drop('foos'); // 删除名为foos的表
}
更多关于Flutter迁移工具插件angel3_migration_runner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter迁移工具插件angel3_migration_runner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 angel3_migration_runner
插件进行 Flutter 迁移任务的代码案例。angel3_migration_runner
通常用于在 Flutter 应用中运行数据库迁移脚本。以下是一个简单的示例,展示了如何设置和使用该插件。
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 angel3_migration
和 angel3_migration_runner
依赖:
dependencies:
flutter:
sdk: flutter
angel3_framework: ^4.0.0 # 确保兼容的版本
angel3_migration: ^4.0.0 # 确保兼容的版本
angel3_migration_runner: ^4.0.0 # 确保兼容的版本
2. 配置数据库和迁移
接下来,配置你的数据库连接和迁移脚本。
数据库连接配置
创建一个文件 database.dart
来配置你的数据库连接:
import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_mysql/angel3_mysql.dart';
import 'package:angel3_migration/angel3_migration.dart';
Angel configureServer() {
var app = Angel();
// 配置 MySQL 连接
var mysqlService = MysqlService(
host: 'localhost',
port: 3306,
user: 'root',
password: 'password',
database: 'your_database_name',
);
app.container.registerSingleton<MysqlService>(() => mysqlService);
// 配置迁移
var migrations = MigrationContainer();
// 添加迁移脚本(这里假设你有一个 migration 文件夹存放迁移脚本)
migrations.add(fromYamlFile('migrations/001_initial_schema.yaml'));
var migrationService = MigrationService(app, migrations);
// 使用迁移服务
app.use('/migrations', migrationService.handler);
return app;
}
迁移脚本
创建一个 migrations
文件夹,并在其中添加一个迁移脚本,例如 001_initial_schema.yaml
:
version: 1
up:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
down:
DROP TABLE users;
3. 运行迁移
在你的 main.dart
文件中,配置并运行迁移:
import 'package:flutter/material.dart';
import 'package:angel3_framework/angel3_framework.dart';
import 'database.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
var app = configureServer();
// 启动应用并运行迁移
try {
await app.configureServer();
var migrationService = app.container.make<MigrationService>();
await migrationService.up();
print('Migrations completed successfully.');
} catch (e) {
print('Error during migration: $e');
}
// 接下来,你可以启动你的 Flutter UI
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter App with Migrations'),
),
body: Center(
child: Text('Hello, Flutter with Angel3 Migrations!'),
),
),
);
}
}
注意事项
- 数据库配置:确保你的数据库连接配置正确。
- 迁移脚本:迁移脚本需要按照正确的格式编写,并且版本号需要递增。
- 错误处理:在生产环境中,添加更多的错误处理和日志记录。
这个示例展示了如何使用 angel3_migration_runner
进行数据库迁移的基本流程。根据你的具体需求,你可能需要调整配置和迁移脚本。