reclosedev
Без кода сложно ответить. Я бы посмотрел, что попадает в Qt когда получили данные из базы, что у нее за тип, что в ней:
some_string = get_some_string_from_db()
print(type(some_string), repr(some_string))
print(some_string)
От этого можно уже смотреть где проблема. Может из БД уже ерунда приходит. Если нет, может шрифта в системе нет.
код:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
from Kernel.Exceptions.MyExceptions import *
import sys
from Kernel.Util import Util
import pyodbc
class DBConnector(QtCore.QThread):
waitSQL = QtCore.pyqtSignal(str, name = 'waitSQL')
doneSQL = QtCore.pyqtSignal(str, name = 'doneSQL')
def __init__(self, UID = '', PWD = '', SERVER = '', DTB = '', DRIVER = '', CHARSET = ''):
QtCore.QThread.__init__(self)
self.DRIVER = DRIVER
self.USERNAME = UID
self.PASSWORD = PWD
self.SERVER = SERVER
self.DATABASE = DTB
self.CHARSET = CHARSET
self.CONNECT = None
self.CURSOR = None
self.REQUEST = None
self.RESPONSE = []
self.WAIT = False
def __del__(self):
self.disconnect()
def connecting(self):
self.CONNECT = pyodbc.connect('DRIVER=%s;SERVER=%s;UID=%s;PWD=%s;DATABASE=%s;CHARSET=%s' % (self.DRIVER, self.SERVER, self.USERNAME, self.PASSWORD, self.DATABASE, self.CHARSET))
print('Connection is getted')
print('autocommin is %s' % self.CONNECT.autocommit)
def getCursor(self):
if self.CONNECT:
self.CURSOR = self.CONNECT.cursor()
print('cursor getted')
else:
raise NoConnection
def runSQL(self, sql = ''):
try:
if sql:
self.waitSQL[str].emit('<font color="red">Ожидаю ответа SQL, пожалуйста подождите</font>')
self.getCursor()
self.CURSOR.execute(sql)
response = [row for row in self.CURSOR]
if not response:
print('SQL response is empty')
raise EmptyResponse
self.CURSOR.close()
return response
except pyodbc.DatabaseError:
self.doneSQL[str].emit('<font color="red">Данные не получены</font>')
else:
self.doneSQL[str].emit('<font color="green">Данные получены</font>')
finally:
self.doneSQL[str].emit('<font color="yellow">requesr is done</font>')
def disconnect(self):
if self.CONNECT:
self.CONNECT.close()
print ('disconnect succesfull')
def setUserName(self, username):
self.USERNAME = username
def getUserName(self):
return self.USERNAME
def setPassword(self, password):
self.PASSWORD = password
def setServer(self, server):
self.SERVER = server
def setDataBase(self, database):
self.DATABASE = database
def setDriver(self, driver):
self.DRIVER = driver
def getDriver(self):
return self.DRIVER
def setCharSet(self, charset):
self.CHARSET = charset
def getCharSet(self):
return self.CHARSET
def info(self):
print('\n===== Connecttion Info =====')
print('SERVER = %s' % self.SERVER)
print('USERNAME = %s' % self.USERNAME)
print('DATABASE = %s' % self.DATABASE)
print('PASSWORD = %s' % self.PASSWORD)
print('DRIVER = %s' % self.DRIVER)
print('============================\n')
def test(self, SERVER = '', DATABASE = '', USERNAME = '', PASSWORD = '', DRIVER = ''):
self.setUserName(USERNAME)
self.setPassword(PASSWORD)
self.setServer(SERVER)
self.setDataBase(DATABASE)
self.setDriver(DRIVER)
self.info()
self.connecting()
По поводу шрифта у меня большие сомнения… не те каракули))) да и у меня в консоль выводится ответ от базы… в консоли тоже “каракули”. Видно что проблема с кодировкой.
вот что попадает в Qt на Linux:
<class 'str'> '\x00\Ue0eaf2f1\Uffebe420\Ueff1e820\Uede0f2fb\Ud15fffe8\U33302ed2\Uff003138\U0806532a\Ub70bbfb0\U0825864f\Ub722716c\U09694a7c\Ubf93fd2c\x00\x00\x08\Uc490a927\x00\U010ae9f0\Ubf93fb88𐀁\x00\x00\x00\x00\x00\x0f𐀁\x00'
�������������������������������������������𐀁𐀁
вот что попадает в Qt на Windows:
<class 'str'> 'Оснастка для испытания_СТ.0381'
Оснастка для испытания_СТ.0381
после того как добавил вот этот кусок кода
some_string = get_some_string_from_db()
print(type(some_string), repr(some_string))
print(some_string)
В Базе данных это тип VARCHAR, хранятся там строки на русском языке.