# http://www.prog.org.ru/topic_4344_0.html
# http://www.prog.org.ru/topic_4202_0.html
from PyQt4 import QtSql, QtGui,QtCore
import sys
views = []
def initializeModel(model):
model.setQuery("select user.user from user")
model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant(QtCore.QObject.tr(model, "user")))
def createView(title, model):
view = QtGui.QTableView()
views.append(view)
view.setModel(model)
view.setWindowTitle(title)
view.show()
def createConnection():
db = QtSql.QSqlDatabase.addDatabase("QMYSQL")
db.setHostName('localhost')
db.setDatabaseName("mysql")
db.setUserName("root")
db.setPassword("****")
if not db.open():
QtGui.QMessageBox.critical(None, QtGui.qApp.tr("Cannot open database"),
QtGui.qApp.tr("Unable to establish a database connection.\nClick Cancel to exit."),
QtGui.QMessageBox.Cancel)
return False
query = QtSql.QSqlQuery()
# query.exec_('SET NAMES utf8_general_ci;')
query.exec_("""SET NAMES 'cp1251'""")
return True
class CustomSqlModel(QtSql.QSqlQueryModel):
def data(self, index, role):
value = QtSql.QSqlQueryModel.data(self, index, role)
if value.isValid() != True:
pass
else:
print "value ok"
return value
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
codec = QtCore.QTextCodec.codecForName("cp1251");
QtCore.QTextCodec.setCodecForLocale (codec)
QtCore.QTextCodec.setCodecForCStrings (codec)
QtCore.QTextCodec.setCodecForTr (codec)
defcodec = QtCore.QTextCodec.codecForLocale()
print defcodec.name()
if not createConnection():
sys.exit(1)
CustomModel = CustomSqlModel()
initializeModel(CustomModel)
createView(QtCore.QObject.tr(CustomModel, "Custom Query Model"), CustomModel)
app.setQuitOnLastWindowClosed(True)
sys.exit(app.exec_())
Ошибок не пишет (разве что при выключении соединение не закрывается). Пробовал разные кодировки – результат один: ошибок нет, данных нет.
Как я понимаю, данные есть, но модель не понимает кодировку, поэтому строки и не показывает? Верху кода 2 ссылки – то, что читал.
Есть какие-то пути решения, кроме как пересобрать плугин mysql для qt?
В mysql дефолтная кодировка cp1251 в таблицах такая же