示例场景:
运行单个服务器的MySQL - > HOSTNAME
该服务器上的两个MySQL数据库 - >用户,游戏。
任务 - >从GAMES.my_games_table获取10个最新游戏,并从USERS.my_users_table获取玩这些游戏的用户(假设没有加入)
在Django以及Python MySQLdb中,为什么每个数据库都有一个游标更可取?
扩展游标的缺点是每个MySQL服务器单个并且可以切换数据库(例如通过查询“使用USERS;”),然后处理相应的数据库
MySQL连接很便宜,但是如果有一个线性流并且没有复杂的tranasactions可能需要两个游标,那么单个连接并不比许多连接好吗?
答案 0 :(得分:9)
一个较短的答案是,“MySQL不支持那种类型的游标”,所以Python-MySQL也不支持,所以首选一个连接命令的原因是因为这就是MySQL的工作方式。这是一种重言式。
然而,答案更长的是:
然而:
cursor
不是用于执行操作的用户可访问机制。 MySQL(和其他人)以“set”的形式执行操作,或者更确切地说,他们将SQL命令编译成内部命令列表,并根据SQL命令的性质和表结构执行大量复杂的操作。cursor
是一种特定的机制,在存储过程中使用(仅限于此),为开发人员提供了一种以程序方式处理数据的方法。答案 1 :(得分:2)
正如你所说,MySQL连接很便宜,所以对于你的情况,我不确定在代码组织和流程之外是否存在技术优势。管理两个游标可能比通过精心跟踪SQL'USE'语句来跟踪单个游标当前正在与之交谈的数据库更容易。其他数据库的里程可能会有所不同 - 请记住,Django努力与数据库无关。
此外,考虑两个不同数据库(即使在同一台服务器上)需要不同访问凭据的情况。在这种情况下,需要两个连接,以便每个连接都可以成功进行身份验证。
答案 2 :(得分:0)
每个数据库一个游标不一定是优选的,它只是默认行为。
基本原理是不同的数据库通常在不同的服务器上,使用不同的引擎,和/或需要不同的初始化选项。 (否则,你为什么要首先使用不同的“数据库”?)
在您的情况下,如果您的两个数据库只是表的名称空间(在SQL术语中应该称为“模式”)但是驻留在同一个MySQL实例上,那么无论如何都要使用单个连接。 (如何配置Django这样做实际上是一个完全不同的问题。)
如果您只有一个线程并且实际上不需要同时拥有两个数据库工作者,那么单个连接优于两个也是正确的。