在 RethinkDB 上同时创建多个表
Create multiple tables in same time on RethinkDB
如果数据库不存在,我写了一个小脚本来创建数据库和 RethinkDB 中的一些 tables。
我正在使用 Python shell 与 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': '{admin@gmail.com}'}).update({'status': 'active', 'scope': ['admin']})
)
).run()
exit()
这很好用,如果不存在就创建数据库,但它只创建第一个 table 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
如何创建所有这些 table 而不是只创建第一个 table ?
在您的第一个查询中,您将 11 个参数传递给 branch
。
的行为
r.branch(A, B, C, D, E, F, G)
表现得像
if A:
return B
elif C:
return D
elif E:
return F
else:
return G
在您的第二个查询中,您使用 for ... in ...
。此 Python 构造作为 lambda 的主体是不合法的。它在 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))
如果数据库不存在,我写了一个小脚本来创建数据库和 RethinkDB 中的一些 tables。
我正在使用 Python shell 与 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': '{admin@gmail.com}'}).update({'status': 'active', 'scope': ['admin']})
)
).run()
exit()
这很好用,如果不存在就创建数据库,但它只创建第一个 table 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
如何创建所有这些 table 而不是只创建第一个 table ?
在您的第一个查询中,您将 11 个参数传递给 branch
。
r.branch(A, B, C, D, E, F, G)
表现得像
if A:
return B
elif C:
return D
elif E:
return F
else:
return G
在您的第二个查询中,您使用 for ... in ...
。此 Python 构造作为 lambda 的主体是不合法的。它在 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))