标签: seeding

用mclapply控制种子

想象一下,我们正在做一些过程,我想在程序的开头设置一个整体种子:例如

mylist <- list( as.list(rep(NA,3)), as.list(rep(NA,3)) )
foo <- function(x){  for(i in 1:length(x)){ 
                       x[[i]] <- sample(100,1)
                         }
                      return(x) 
                     } 

# start block
set.seed(1)
l1 <- lapply(mylist, foo)
l2 <- lapply(mylist, foo)
# end
Run Code Online (Sandbox Code Playgroud)

当然在一个区块内l1并且l2是不同的,但是如果我再次运行上面的区块l1将与之前相同并且l2将与之前相同.

想象一下,foo是可怕的耗时,所以我想用mclapply没有lapply,所以我这样做:

library(parallel)

# start block
set.seed(1)
mclapply(mylist , foo,  mc.cores = 3)
mclapply(mylist , foo,  mc.cores = 3)
# end
Run Code Online (Sandbox Code Playgroud)

如果我再次运行此块,我将在下次获得不同的结果.我如何产生与使用lapply但设置一个整体种子相同的行为mclappy.我查看了mclapplydoc,但我不确定因为使用:

set.seed(1)
l1 <-  mclapply(mylist , …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r apply seeding random-seed

7
推荐指数
1
解决办法
1449
查看次数

Laravel播种不填写字段

我有一个数据库种子文件:

class ContactTableSeeder extends Seeder {
    public function run()
    {
        $contacts = array(
            array(
                'first_name'        => 'Test',
                'last_name'         => 'Contact',
                'email'             => 'test.contact@emai.com',
                'telephone_number'  => '0111345685',
                'address'           => 'Address',
                'city'              => 'City',
                'postcode'          => 'postcode',
                'position'          => 'Director',
                'account_id'        => 1
           )
        );

        foreach ($contacts as $contact) {
            Contact::create($contact);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行php artisan migrate时:refresh --seed它为数据库播种并在contacts表中创建相关记录,除了它没有用种子数组中的任何信息填充字段.我对其他表使用完全相同的语法并且它们工作正常,我还彻底检查了每个字段以确保它们与数据库字段匹配,但无论我做什么它都不会正确播种.

有没有人有任何想法?

migrate seeding laravel laravel-4

6
推荐指数
2
解决办法
3269
查看次数

使用visual studio ssdt为不同的发布配置文件部署不同的种子数据?

是否可以使用visual studio Sql Server数据工具数据库项目为不同的发布配置文件部署不同的种子数据集?

我们知道您可以使用部署后脚本部署种子数据.我们知道您可以使用发布配置文件工具部署到不同的环境.我们不知道的是如何将不同的种子数据部署到不同的环境中.

我们为什么要这样做?

  • 我们希望能够这样做,因此我们可以使用一小组明确的种子数据进行单元测试.
  • 我们需要更广泛的数据集部署到测试团队的环境中,以便测试团队针对整个应用程序进行测试
  • 我们需要一组特定的种子数据用于预生产环境.

database-project visual-studio seeding publish-profiles sql-server-data-tools

6
推荐指数
1
解决办法
2030
查看次数

Laravel 5重新安装测试之间的单元测试数据库

我从一个种子数据库开始,我试图在Laravel 5中的单元测试之间重新设置数据库.在Laravel 4中我理解你可以简单地使用Illuminate\Support\Facades\Artisan并运行命令

Artisan::call('migrate');
Artisan::call('db:seed');
Run Code Online (Sandbox Code Playgroud)

或者你认为可以这样做:

$this->seed('DatabaseSeeder');
Run Code Online (Sandbox Code Playgroud)

在每次测试之前.在Laravel 5中,这似乎已被替换为

use DatabaseMigrations;
Run Code Online (Sandbox Code Playgroud)

要么

use DatabaseTransactions;
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用这些并且设法获得测试以迁移数据库; 但是,它实际上并没有重新设置表格中的数据.我已经阅读了几个论坛抱怨这个,并尝试了几种不同的方法从TestCase和每个测试中调用这些...添加

    $this->beforeApplicationDestroyed(function () {
        Artisan::call('migrate');
        Artisan::call('migrate:reset');
        Artisan::call('db:seed');
        DB::disconnect();
    });
Run Code Online (Sandbox Code Playgroud)

到TestCase.php tearDown()......

我也尝试过添加

$this->createApplication();
Run Code Online (Sandbox Code Playgroud)

从TestCase.php的每个测试中调用的方法

有时它只是完全擦掉我的桌子.我在Laravel的网站或博客中找到的任何内容似乎都无效.部分原因可能是因为我可能在Laravel 5中尝试Laravel 4方法.在Laravel 5中有没有办法做到这一点?

我的testcase.php代码如下:

<?php

use Illuminate\Support\Facades\Artisan as Artisan;

class TestCase extends Illuminate\Foundation\Testing\TestCase{

    use Illuminate\Foundation\Testing\WithoutMiddleware;
    use Illuminate\Foundation\Testing\DatabaseMigrations;
    use Illuminate\Foundation\Testing\DatabaseTransactions;

    protected $baseUrl = 'http://localhost';


    public function initializeTests(){

        $this->createApplication();

       Artisan::call('migrate');
       $this->artisan('migrate');
       Artisan::call('db:seed');
       $this->artisan('db:seed');
       $this->seed('DatabaseSeeder');
       $this->session(['test' => 'session']);
       $this->seed('DatabaseSeeder');

    }

    public function tearDown()
    {
      Mockery::close();
      Artisan::call('migrate:reset');
      $this->artisan('migrate:reset');
      Artisan::call('migrate:rollback');
      $this->artisan('migrate:rollback');
      Artisan::call('migrate');
      $this->artisan('migrate');
      Artisan::call('db:seed'); …
Run Code Online (Sandbox Code Playgroud)

database phpunit unit-testing seeding laravel-5

6
推荐指数
1
解决办法
3077
查看次数

django_address 模块是否提供了一种为初始国家数据做种的方法?

我正在使用 Django 2.0、Python 3.7 和 MySql 5。我最近安装了 django_address 模块。我注意到当我根据我的 models.py 文件运行我的初始迁移时......

from django.db import models

from address.models import AddressField
from phonenumber_field.modelfields import PhoneNumberField


class CoopType(models.Model):
    name = models.CharField(max_length=200, null=False)

    class Meta:
        unique_together = ("name",)


class Coop(models.Model):
    type = models.ForeignKey(CoopType, on_delete=None)
    address = AddressField(on_delete=models.CASCADE)
    enabled = models.BooleanField(default=True, null=False)
    phone = PhoneNumberField(null=True)
    email = models.EmailField(null=True)
    web_site = models.TextField()
Run Code Online (Sandbox Code Playgroud)

它创建了一些地址表,包括...

mysql> show create table address_country;
+-----------------+---------------------------------------------------+
| Table           | Create Table                                      |
+-----------------+---------------------------------------------------+
| address_country | CREATE TABLE `address_country` (                  |
|                 | …
Run Code Online (Sandbox Code Playgroud)

python django seeding python-3.x

6
推荐指数
2
解决办法
516
查看次数

如何在 Laravel 8 中使用不同的数据透视数据建立多个多对多关系?

我知道我可以使用该hasAttached方法在 Laravel 8 中创建与数据透视表数据的多对多关系:

  Meal::factory()
        ->count(3)
        ->hasAttached(Ingredient::factory()->count(3), ['gram' => 100])
        ->create();
Run Code Online (Sandbox Code Playgroud)

是否有任何方便的方法(除了编写自定义 for 循环之外)为数据透视表中的每个附加条目添加随机数据?我希望'gram'是每个创建的关系的随机数。我尝试了以下方法,但rand表达式仅被计算一次,并为每个关系使用相同的条目填充数据透视表:

Meal::factory()
        ->count(3)
        ->hasAttached(Ingredient::factory()->count(3), ['gram' => rand(1,100]) //not working
        ->create();
Run Code Online (Sandbox Code Playgroud)

编辑:我基本上想要实现

for ($i = 1; $i <= 3; $i++) {
        $meal = Meal::factory()->create();

        for ($j = 1; $j <= 3; $j++) {
            $ingredient = Ingredient::factory()->create();
            $meal->ingredients()->save($ingredient, ['gram' => rand(5, 250)]);
        }
    }
Run Code Online (Sandbox Code Playgroud)

使用 Laravel 流畅的工厂方法。

factory seeding laravel laravel-8

6
推荐指数
1
解决办法
2141
查看次数

rake undefined方法`fields'代表nil:数据库种子上的NilClass

当我尝试做的时候

rake db:reset
Run Code Online (Sandbox Code Playgroud)

要么

rake db:drop
rake db:create
rake db:schema:load
rake db:seed
Run Code Online (Sandbox Code Playgroud)

NoMethodError: undefined method 'fields' for nil:NilClass当种子出现时,我随机得到一个.这是一个:

[1m[35m (186.0ms)[0m  INSERT INTO "schema_migrations" (version) VALUES ('20130318105449')
[1m[36m (187.0ms)[0m  [1mINSERT INTO "schema_migrations" (version) VALUES ('20130319154146')[0m
[1m[35m (189.0ms)[0m  INSERT INTO "schema_migrations" (version) VALUES ('20130322132730')
[1m[36m (104.0ms)[0m  [1mINSERT INTO "schema_migrations" (version) VALUES ('20130322142814')[0m
NoMethodError: undefined method `fields' for nil:NilClass:               SELECT COUNT(*)
          FROM pg_class c
          LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
          WHERE c.relkind in ('v','r')
          AND c.relname = 'schema_migrations'
          AND n.nspname …
Run Code Online (Sandbox Code Playgroud)

postgresql rake ruby-on-rails seeding ruby-on-rails-4

5
推荐指数
1
解决办法
2548
查看次数

为什么不调用种子方法?

我正在编写一个 MVC 5 互联网应用程序,并希望得到一些帮助来执行种子方法以使用一些实体填充数据库。

这是我的DbContext代码:

public class CanFindLocationDatabaseContext : DbContext
{
    public class SystemInitializer : CreateDatabaseIfNotExists<CanFindLocationDatabaseContext>
    {
        protected override void Seed(CanFindLocationDatabaseContext context)
        {

        }
    }   
}
Run Code Online (Sandbox Code Playgroud)

在我的Application_Start方法中,我有以下代码:

System.Data.Entity.Database.SetInitializer<CanFindLocationDatabaseContext>(new CanFindLocation.Context.CanFindLocationDatabaseContext.SystemInitializer());
Run Code Online (Sandbox Code Playgroud)

当我访问类中的任何DbSet对象时CanFindLocationDatabaseContext,不会执行种子方法。在我测试种子代码之前没有数据库。

正在创建数据库,正在创建表,但是没有调用seed 方法,并且任何表中都没有数据。

我在同一个项目中还有以下标识 2.1 的代码:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("CanFindLocationDatabaseContext", throwIfV1Schema: false)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

为该 DbContext 类调用种子方法,但不为CanFindLocationDatabaseContext.

为什么会这样,我该如何编写代码以便执行种子方法?

提前致谢。

c# seeding dbcontext entity-framework-6 asp.net-mvc-5

5
推荐指数
1
解决办法
4780
查看次数

如何从代码第一次播种生成 SQL 脚本?

由于我无法使用该migrate.exe工具来更新数据库,因此我正在创建迁移 SQL 脚本并手动应用它们,这非常有效。

由于种子部分未包含在迁移中,因此它们不会产生 SQL 脚本。

我怎样才能获得种子方法来生成 SQL 脚本?

我目前正在将种子方法应用于我的本地数据库。解决问题的一种方法是使用实​​体框架拦截器拦截 SQL 调用,但这听起来像是一个肮脏的黑客。那么有没有更好的方法呢?

entity-framework seeding ef-code-first

5
推荐指数
0
解决办法
598
查看次数

EF Core 2.1 HasData() 在后续迁移中为未更改的实体创建删除和重新插入

更新 8/29/18

new种子数据的inline -ing 中也看到了这个问题。打开了一个EF Core 问题。将使用任何发现更新问题。


我正在尝试使用EF Core 2.1 的播种机制。但是,我想从 json 平面文件加载种子数据,而不是硬编码新的 C# 对象。我写了下面的扩展方法,对于初始迁移效果很好。它查找命名为[MyEntity].jsonin 的文件并将DataPath它们反序列化为对象。

问题是,如果我添加后续迁移,即使没有更改模型、配置或 json 文件中的任何内容,新迁移也会删除每个实体并再次重新插入它们。因此,它Up()包含一堆删除,然后是一堆相同数据的插入。我怀疑这是因为 EF Core 不够聪明,无法识别它是一组相同的种子数据。

题:

有没有办法将 EF Core 2.1 种子与外部数据源(例如 json 文件)一起使用,而无需每次迁移都删除并重新插入数据?

我的播种扩展方法:

public static class ModelBuilderExtensions
{
    public static string DataPath { private get; set; } = "..\\..\\data";

    public static void Seed<TEntity>(this ModelBuilder modelBuilder) where TEntity : class, IBaseEntity
    {
        var entities = GetSeedRows<TEntity>();
        modelBuilder.Entity<TEntity>().HasData(entities);
    }

    private static TEntity[] …
Run Code Online (Sandbox Code Playgroud)

c# seeding entity-framework-core

5
推荐指数
1
解决办法
911
查看次数