在 PyQt 中连接到没有数据库名称的 MySQL 服务器
我正在创建一个 PyQt 应用程序,将其数据存储在 MySQL 数据库中。我希望我的应用程序能够在首次运行时自动创建数据库。但是,我找不到任何在不指定数据库名称的情况下连接到 MySQL 服务器的函数。
我知道 MySQL 服务器提供了无需指定数据库名称即可连接到它的功能,按照 MySQL 文档:
对于 mysql,第一个非选项参数被视为默认数据库的名称。如果没有这个选项,mysql不会选择默认数据库。
如何从 PyQt 应用程序执行此操作?
此外,一些在线资源建议通过指定 MySQL 创建的默认数据库之一的名称来连接到 MySQL 服务器。在这种情况下如何创建新数据库?
I am creating a PyQt application that stores its data in a MySQL database. I want my application to be able to auto-create the database on first run. However, I couldn't find any function to connect to the MySQL Server without specifying a database name.
I know that MySQL Server provides the functionality to connect to it without specifying a database name, as per the MySQL documentation:
For mysql, the first nonoption argument is taken as the name of the default database. If there is no such option, mysql does not select a default database.
How do I do this from my PyQt application?
Additionally, some online resources have suggested connecting to the MySQL server by specifying the names of one of the default databases created by MySQL. How do I create a new database in such a case?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以以 mysql 管理员用户身份连接到 mysql 数据库,该用户应该始终存在于健康的 mysql 环境中。然后您可以创建一个新数据库,关闭连接并重新连接到新创建的数据库:
You can connect to the mysql database as the mysql admin user, that should always be present in a healthy mysql environment. Then you can create a new database, close the connection and reconnect to the newly created database:
您始终可以指定 information_schema DB,即使对于非特权用户也是如此。
You can always specify information_schema DB, even with non-privileged user.
看着 Density 21.5 的答案,我意识到在 PyQt 中也可以执行这些命令。您不必绑定到打开 QSqlDatabase 连接的同一个数据库;抢占关闭的需要重新打开连接。
因此,解决该问题的最简单方法是:
Looking at
Density 21.5
's answer, I realized that executing these commands is also possible within PyQt. You are not bound to the same database with which you open aQSqlDatabase
connection; preempting the need to close & reopen the connection.Hence, the simplest way to solve the problem would be: