安装设备后,我得到了这个.
class DeviseCreateUsers < ActiveRecord::Migration
def self.up
create_table(:users) do |t|
t.database_authenticatable :null => false
t.recoverable
t.rememberable
t.trackable
# t.encryptable
# t.confirmable
# t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
# t.token_authenticatable
t.timestamps
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
# add_index :users, :confirmation_token, :unique => true
# add_index :users, :unlock_token, :unique => true
# add_index :users, :authentication_token, :unique => true
end
def self.down
drop_table :users
end
end
Run Code Online (Sandbox Code Playgroud)
现在,如果我执行rake db:migrate,将创建users表.
如何恢复此迁移,即如何再次使用rake删除users表?
migration rake ruby-on-rails database-migration ruby-on-rails-3.1
我正在尝试从SQL Server数据库备份文件(.bak)转换为MySQL.这个问题和答案非常有用,我已经成功导入了数据库,但现在我仍然坚持导出到MySQL.
建议使用MySQL Migration Toolkit,但似乎已被MySQL Workbench取代.是否可以使用MySQL Workbench以与迁移工具相同的方式从SQL Server迁移?
或者迁移工具包是否仍可在某处使用?
不要假设,我有一个简单的房间数据库:
@Database(entities = {User.class}, version = 1)
abstract class AppDatabase extends RoomDatabase {
public abstract Dao getDao();
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在添加一个新实体:Pet并将版本提升为2:
@Database(entities = {User.class, Pet.class}, version = 2)
abstract class AppDatabase extends RoomDatabase {
public abstract Dao getDao();
}
Run Code Online (Sandbox Code Playgroud)
当然,Room会抛出异常: java.lang.IllegalStateException: A migration from 1 to 2 is necessary.
假设,我没有更改User类(因此所有数据都是安全的),我必须提供只创建新表的迁移.所以,我正在调查Room生成的类,搜索生成的查询以创建我的新表,复制它并粘贴到迁移中:
final Migration MIGRATION_1_2 =
new Migration(1, 2) {
@Override
public void migrate(@NonNull final SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS `Pet` (`name` TEXT NOT NULL, PRIMARY KEY(`name`))"); …Run Code Online (Sandbox Code Playgroud) 我使用这样的迁移创建了一个表:
public function up()
{
Schema::create('despatch_discrepancies', function($table) {
$table->increments('id')->unsigned();
$table->integer('pick_id')->unsigned();
$table->foreign('pick_id')->references('id')->on('picks');
$table->integer('pick_detail_id')->unsigned();
$table->foreign('pick_detail_id')->references('id')->on('pick_details');
$table->integer('original_qty')->unsigned();
$table->integer('shipped_qty')->unsigned();
});
}
public function down()
{
Schema::drop('despatch_discrepancies');
}
Run Code Online (Sandbox Code Playgroud)
我需要更改此表并删除外键引用和列,pick_detail_id并添加一个名为skuafter pick_idcolumn 的新varchar 列.
所以,我创建了另一个迁移,看起来像这样:
public function up()
{
Schema::table('despatch_discrepancies', function($table)
{
$table->dropForeign('pick_detail_id');
$table->dropColumn('pick_detail_id');
$table->string('sku', 20)->after('pick_id');
});
}
public function down()
{
Schema::table('despatch_discrepancies', function($table)
{
$table->integer('pick_detail_id')->unsigned();
$table->foreign('pick_detail_id')->references('id')->on('pick_details');
$table->dropColumn('sku');
});
}
Run Code Online (Sandbox Code Playgroud)
当我运行此迁移时,我收到以下错误:
[Illuminate\Database\QueryException]
SQLSTATE [HY000]:一般错误:1025将'./dev_iwms_reboot/despatch_discrepancies'重命名为'./dev_iwms_reboot/#sql2-67c-17c464'时出错(错误号:152)(SQL:alter tabledespatch_discrepancies删除外键pick_detail_id)[PDOException]
SQLSTATE [HY000]:一般错误:1025将'./dev_iwms_reboot/despatch_discrepancies'重命名为'./dev_iwms_reboot/#sql2-67c-17c464'时出错(错误号:152)
当我尝试通过运行php artisan migrate:rollback命令来反转此迁移时,我收到一条Rolled back消息,但它实际上并没有在数据库中执行任何操作.
知道什么可能是错的吗?如何删除具有外键引用的列?
我有一个当前的第二个版本的本地数据库,现在应该转到它的第三个版本.
以前迁移的代码是由另一个程序员生成的,所以我假设我在这里做错了.
在我的模型中有大约30个类,在模型文件夹中有一个映射文件夹,它包含这30个类的映射.
所以现在我以与之前的类相同的方式添加了1个新类,然后在包管理器控制台中运行add-migration命令.
幸运的是,我获得了一个空迁移Up()和Down()方法.
当我查看数据库时,有一个__migrationHistory可用于前两次迁移.如果我现在运行我的应用程序,也会添加第三个迁移,但显然没有创建新表,因为它不在Up()方法中.
我能做错什么?
我认为在搭建以前的迁移时会出现问题......就像它找不到我添加的新的Code-First类一样.
这是我的命令:
add-migration "1.2" -verbose -ProjectName "MyEFproject"
Run Code Online (Sandbox Code Playgroud)
我假设脚手架不知道在哪里寻找新类...或者按照惯例,所有模型类都只是在项目中?
添加迁移的结果:
namespace MyProject.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class _1002 : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
新模型类的示例:
using System;
using System.Collections.Generic;
namespace MyProject.Models
{
public partial class MyTable
{
public string SomeId { get; set; }
public string SomeText { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
新Mapping类的示例
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
namespace MyProject.Models.Mapping …Run Code Online (Sandbox Code Playgroud) 当我跑
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
在我的django项目中,我收到以下错误
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/hari/project/env/local/lib/python2.7/site- packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 86, in handle
executor.loader.check_consistent_history(connection)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 298, in check_consistent_history
connection.alias,
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency account.0001_initial on database 'default'.
Run Code Online (Sandbox Code Playgroud)
我有一个像下面这样的用户模型
class User(AbstractUser):
place …Run Code Online (Sandbox Code Playgroud) python django database-migration django-models django-rest-framework
我只是安装EF 4.3并试图通过迁移升级我的项目.但是我遇到了尝试add-migration initial通过Package Manager控制台执行我的项目的问题.
它现在抛出任何异常 No connection string named 'MyApplicationEntities' could be found in the application config file.
现在我的配置拥有一切
<connectionStrings>
<add name="MyApplicationEntities"
connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=localhost;initial catalog=MyApplicationEntitiesDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)
我不确定是什么问题是EF 4.3中的一个错误或者我做得不对.
我认为这篇文章解决了这个问题但并不完全.
任何人都有答案.
感谢Sanj.
我们正在使用Database First方法和EntityFramework.我们有几个客户,当我们部署新产品版本时,我们现在正在使用类似的工具"手动"应用数据库架构更改SQL Compare.
有没有一种方法可以帮助EF Migrations自动将更改应用于客户数据库?
我在我的本地ubuntu机器上创建了一个数据库.
如何将其传输到我的远程服务器(ec2 Ubuntu)
我的应用程序需要预先注册的数据集才能工作.所以我需要在设置应用程序时将它们插入数据库中.
Laravel提出了两种机制:
当我读到这个描述时,这些解决方案似乎都没有适应.
在stackoverflow上已经提出了类似的问题并回答了问题.答案建议使用数据库播种器通过检测当前环境来填充数据库:
<?php
class DatabaseSeeder extends Seeder {
public function run()
{
Eloquent::unguard();
if (App::environment() === 'production')
{
$this->call('ProductionSeeder');
}
else
{
$this->call('StagingSeeder');
}
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这个解决方案有效.但我不确定这是否是正确的方法,因为通过使用播种机插入数据,您将失去迁移机制提供的所有优势(数据库升级,回滚......)
我想知道在这种情况下最佳做法是什么.