2016-12-23 15 views
0

データベースが存在しない場合、DBといくつかのテーブルをRethinkDB内に作成するための小さなスクリプトを書きました。RethinkDBで複数のテーブルを同時に作成する

私はよくRethinkDB

import rethinkdb as r 

r.connect('localhost', 28015).repl() 

r.db_list().contains('atlas').do(lambda databaseExists: 
    r.branch(
     databaseExists, 
     { 'dbs_created': 0 }, 
     r.db_create('atlas'), 
     r.db('atlas').table_create('Carts'), 
     r.db('atlas').table_create('Checkouts'), 
     r.db('atlas').table_create('Collections'), 
     r.db('atlas').table_create('Contents'), 
     r.db('atlas').table_create('Orders'), 
     r.db('atlas').table_create('Products'), 
     r.db('atlas').table_create('Users'), 
     r.db('atlas').table('Users').filter({'email': '{[email protected]}'}).update({'status': 'active', 'scope': ['admin']}) 
    ) 
).run() 

exit() 

でこの作品を伝え、存在しない場合は、データベースを作成するために、Pythonシェルを使用していますが、それは最初のテーブルだけCartsを作成し、次の要求をスキップします。

私はこの代わりに

r.expr(['Carts', 'Checkouts', 'Collections', 'Contents', 'Orders', 'Products', 'Users']).do(lambda tables: 
    for table in tables: 
     r.db('atlas').table_create(table) 
), 

と試みたが、私は無効な構文エラー

File "<stdin>", line 10 
    r.expr(['Carts', 'Checkouts', 'Collections', 'Contents', 'Orders', 'Products', 'Users']).do(for table in tables: 
                           ^
SyntaxError: invalid syntax 

にはどうすればいいだけではなく最初のテーブルに一度、すべてこのテーブルを作成することができますか?

答えて

1

最初のクエリでは、11個の引数をbranchに渡します。

r.branch(A, B, C, D, E, F, G) 

の挙動は、それはあなたがfor ... in ...を使用し、2番目のクエリで

if A: 
    return B 
elif C: 
    return D 
elif E: 
    return F 
else: 
    return G 

のように振る舞います。このPythonの構造体は、ラムダの本体としては正当ではありません。また、ReQLクエリ内では機能しません。

単一のRethinkDBクエリで書き込み操作を組み合わせる便利な方法は、for_eachを使用することです。ここに例があります:

r.branch(
    r.db_list().contains('atlas'), 
    { 'dbs_created': 0 }, 
    r.expr([ 
    r.db_create('atlas'), 
    r.db('atlas').table_create('Carts'), 
    r.db('atlas').table_create('Checkouts') 
    ]).for_each(x => x)) 
関連する問題