Подключитесь к MySQL серверу без имени базы данных в PyQt - PullRequest
3 голосов
/ 18 февраля 2012

Я создаю приложение PyQt, которое хранит свои данные в базе данных MySQL. Я хочу, чтобы мое приложение могло автоматически создавать базу данных при первом запуске. Однако я не смог найти какую-либо функцию для подключения к MySQL Server без указания имени базы данных.

Я знаю, что MySQL Server обеспечивает функциональность для подключения к нему без указания имени базы данных согласно документации MySQL :

Для mysql первый аргумент nonoption принимается как имя базы данных по умолчанию. Если такой опции нет, mysql не выбирает базу данных по умолчанию.

Как мне это сделать из моего приложения PyQt?

Кроме того, некоторые онлайн-ресурсы предлагают подключиться к серверу MySQL, указав имена одной из баз данных по умолчанию, созданных MySQL. Как мне создать новую базу данных в таком случае?

Ответы [ 3 ]

2 голосов
/ 18 февраля 2012

Вы можете подключиться к базе данных 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>
0 голосов
/ 21 февраля 2012

Глядя на ответ 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;""")
0 голосов
/ 18 февраля 2012

Вы всегда можете указать БД information_schema даже с непривилегированным пользователем.

...