我正在使用sqlalchemy编写Web应用程序.在网站未投入生产的第一阶段开发期间,一切顺利.我可以通过简单地删除旧的sqlite数据库并从头创建一个新数据库来轻松更改数据库模式.
现在该网站正在生产中,我需要保留数据,但我仍然希望通过轻松地将数据库转换为新模式来保持原始开发速度.
因此,假设我在修订版50中有model.py,在model.py中有修订版75,描述了数据库的模式.在这两个模式之间,大多数更改都是微不足道的,例如,使用默认值声明新列,我只想将此默认值添加到旧记录中.
最终,一些变化可能不是微不足道的,需要一些预先计算.
您如何(或将)如何处理快速变化的Web应用程序,例如,每天使用一个或两个新版本的生产代码?
顺便说一句,如果这有任何不同,该网站是用Pylons编写的.
当我向核心数据模型添加新属性时,我想让我的应用程序能够进行自动轻量级迁移.
在Apple的指南中,这是我能找到的主题的唯一信息:
自动轻量级迁移
要请求自动轻量级迁移,请在addPersistentStoreWithType中传递的选项字典中设置适当的标志:configuration:URL:options:error:.您需要将与NSMigratePersistentStoresAutomaticallyOption和NSInferMappingModelAutomaticallyOption键对应的值设置为YES:
NSError *error;
NSURL *storeURL = <#The URL of a persistent store#>;
NSPersistentStoreCoordinator *psc = <#The coordinator#>;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if (![psc addPersistentStoreWithType:<#Store type#>
configuration:<#Configuration or nil#> URL:storeURL
options:options error:&error]) {
// Handle the error.
}
Run Code Online (Sandbox Code Playgroud)
我NSPersistentStoreCoordinator以这种方式初始化:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"FC.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] …Run Code Online (Sandbox Code Playgroud) 我有一个使用sqlalchemy(在Pylons内)的Web应用程序.我需要有效地更改架构,以便至少每天更改生产版本,可能更多,而不会丢失数据.
我在周末用sqlalchemy-migrate进行了一些玩法,我会说这给我留下了不好的印象.首先,我认为它无法帮助两个数据库引擎之间的迁移 ; 这可能只能通过sqlalchemy完成.其次,文档似乎不是最新的.我不得不更改一些命令行选项,比如在每个命令中给出存储库路径,这可能是迁移的错误.
但最糟糕的是它是"manage.py test "命令.它不仅实际修改了数据库(文档中明确指出了这一点,所以我不能责怪迁移),但是我的第一个迁移脚本只是进行了简单的模式迁移,使升级后的数据库与原始数据库的模式不同.但是"manage.py测试"只回答了类似的问题
success !
Run Code Online (Sandbox Code Playgroud)
也就是说,它甚至没有检查架构是否处于连贯状态.那么迁移是否值得?与S.Lott提出的良好实践相关的"自己动手"方法相比,是否有任何优势?是否有sqlalchemy-migrate的替代方案实际上简化了迁移过程,或者我只是尝试使用先验不好的迁移(那么请告诉我为什么不明显优于创建上面链接中提出的CSV列)?
非常感谢!
python migration data-migration sqlalchemy sqlalchemy-migrate
我试图使用实体框架数据迁移,如描述的这个帖子.
但是,当我尝试执行该Enable-Migrations步骤时,我在程序包管理器控制台中收到以下错误:
The target context 'MyDataContext' is not constructible. Add a default constructor or provide an implementation of IDbContextFactory
Run Code Online (Sandbox Code Playgroud)
因此,我创建了一个IDbContextFactory在包含我的DbContext类的项目中实现的工厂类,但数据迁移似乎无法识别它.
我是否应该明确指示数据迁移使用此工厂类?
我有一个处于BETA模式的应用程序.这个应用程序的模型有一些带有显式primary_key的类.因此Django使用字段并且不会自动创建id.
class Something(models.Model):
name = models.CharField(max_length=64, primary_key=True)
Run Code Online (Sandbox Code Playgroud)
我认为这是一个坏主意(在django admin中保存对象时看到unicode错误),我想回去并为我的模型的每个类都有一个id.
class Something(models.Model):
name = models.CharField(max_length=64, db_index=True)
Run Code Online (Sandbox Code Playgroud)
我已经对我的模型进行了更改(通过db_index = True替换每个primary_key = True)并且我想要使用south迁移数据库.
遗憾的是,迁移失败并显示以下消息:
ValueError: You cannot add a null=False column without a default value.
我正在评估此问题的不同解决方法.有什么建议?
谢谢你的帮助
是否有工具将SQLite数据库迁移到SQL Server(结构和数据)?
我需要将一些列从一个现有表移动到另一个表.如何使用rails迁移执行此操作?
class AddPropertyToUser < ActiveRecord::Migration
def self.up
add_column :users, :someprop, :string
remove_column :profiles, :someprop
end
def self.down
add_column :profiles, :someprop, :string
remove_column :users, :someprop
end
end
Run Code Online (Sandbox Code Playgroud)
以上只是创建新列,但值保持为空...
我想避免登录到数据库以手动更新表.
如果有一种以编程方式移动列值的方法,那么性能特征是什么?它会逐行进行,还是有办法批量更新?
我非常喜欢Rails的数据库迁移管理系统.它不是100%完美,但它可以做到这一点.Django没有附带这样的数据库迁移系统(但是?)但是有很多开源项目可以做到这一点,例如django-evolution和south.
所以我想知道,您更喜欢django的数据库迁移管理解决方案?(每个答案一个选项请)
我需要将一个复杂的项目从sqlite迁移到PostgreSQL.很多人似乎都有外键,数据截断等问题......
编辑:我尝试了django-command-extensions DumpScript,但它不能在我的2GB RAM PC上使用我当前的DataSet运行.
data-migration ×10
django ×4
python ×4
database ×2
sqlalchemy ×2
sqlite ×2
core-data ×1
django-south ×1
iphone ×1
migrate ×1
migration ×1
postgresql ×1
pylons ×1
sql-server ×1