在 PyQt 中连接到没有数据库名称的 MySQL 服务器

发布于 2025-01-07 00:30:53 字数 443 浏览 0 评论 0原文

我正在创建一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你爱我像她 2025-01-14 00:30:53

您可以以 mysql 管理员用户身份连接到 mysql 数据库,该用户应该始终存在于健康的 mysql 环境中。然后您可以创建一个新数据库,关闭连接并重新连接到新创建的数据库:

import MySQLdb
db=MySQLdb.connect(user=MySQLADMIN,password=MYSQLADMINPASSWORD,db="mysql")
c = db.connect()
c.execute("""CREATE DATABASE yourdatabasename;""")
c.execute("""GRANT ALL PRIVILEGES ON yourdatabasename.* TO 'yourusername' IDENTIFIED BY 'youruserpassword';""")
c.close()

db = MySQLdb.connect(user=yourusername,password=youruserpassword,db="yourdatabasename")
c = db.connect()
<your dbase code here>

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:

import MySQLdb
db=MySQLdb.connect(user=MySQLADMIN,password=MYSQLADMINPASSWORD,db="mysql")
c = db.connect()
c.execute("""CREATE DATABASE yourdatabasename;""")
c.execute("""GRANT ALL PRIVILEGES ON yourdatabasename.* TO 'yourusername' IDENTIFIED BY 'youruserpassword';""")
c.close()

db = MySQLdb.connect(user=yourusername,password=youruserpassword,db="yourdatabasename")
c = db.connect()
<your dbase code here>
仅此而已 2025-01-14 00:30:53

您始终可以指定 information_schema DB,即使对于非特权用户也是如此。

You can always specify information_schema DB, even with non-privileged user.

叫嚣ゝ 2025-01-14 00:30:53

看着 Density 21.5 的答案,我意识到在 PyQt 中也可以执行这些命令。您不必绑定到打开 QSqlDatabase 连接的同一个数据库;抢占关闭的需要重新打开连接。

因此,解决该问题的最简单方法是:

from PyQt4.QtSql import *

db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("localhost")
db.setPort(3306)
db.setDatabaseName("mysql")
db.setUserName("root")
db.setPassword("")
db.open()

query = QSqlQuery()
query.exec_("""CREATE DATABASE IF NOT EXISTS newdb;""")
query.exec_("""USE newdb;""")

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 a QSqlDatabase connection; preempting the need to close & reopen the connection.

Hence, the simplest way to solve the problem would be:

from PyQt4.QtSql import *

db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("localhost")
db.setPort(3306)
db.setDatabaseName("mysql")
db.setUserName("root")
db.setPassword("")
db.open()

query = QSqlQuery()
query.exec_("""CREATE DATABASE IF NOT EXISTS newdb;""")
query.exec_("""USE newdb;""")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文