Hallo karolus und Sirius3:
in diesem Beitrag habe ich insgesamt zwei Arten von
create_engine vorgestellt, einmal die zusammengestückelte und einmal die mit dem Format-String:
Code: Alles auswählen
# version 1
engine = create_engine(dbm_system+'+'+dbm_driver+'://' + db_user + ':' + db_passwd + '@' + db_host + ':' + db_port + '/' + db_name,
encoding='utf8', echo=True)
# version 2
engine = create_engine(unicode('{db_sys}+{db_driver}://{user}:{password}@{host}:{port}/{db}').format(
db_sys=dbm_system,
db_driver=dbm_driver,
user=db_user,
password=db_passwd,
host=db_host,
port=db_port,
db=db_name,
connect_args = {'time_zone': +'00:00'},
encoding=utf8',
echo=(True)))
Und in beidem wird auch der Encoding mit angegeben. In beiden Versionen fiel mir ein unterschiedliches Verhalten auf. In der zusammengestückelten Version wird nach einer erfolgreichen Anmeldung das Echo mit ausgespuckt sobald True gesetzt ist. Im String-Format erscheint kein Echo. Also ging ich davon aus, dass dort nichts unternommen wird, und auch das
encoding vermutlich nicht greift. Also nahm ich die zerstückelte Version, und meldete mich nochmal mit chinesischen Zeichen an. Alles wunderbar.
Aber ich möchte deine Version auch verstehen, Sirius3, daher versuche ich mal mit meinen Worten nachzuvollziehen:
Code: Alles auswählen
import urllib
def quote_unicode(value):
return urllib.quote(unicode(value).encode('utf-8'), safe='')
Hier wird eine Funktion erstellt, mit dem Argument
value. Mit Hilfe von der
urllib.quote()-Methode wird ein Argument zunächst in utf--8 enkodiert, und anschließend in unicode() umgewandelt, und was passiert mit safe?
Code: Alles auswählen
def make_url(self):
server_host = quote_unicode(self.ui_login.lineEdit_sevrer_host.text())
username = quote_unicode(self.ui_login.lineEdit_username.text())
...
Und die QStrings sind hier die
value-Argumente, die der
quote_unicode() übergeben und anschließend von der Funktion nach der Verarbeitung zurückgegeben werden. Ich hoffe, ich habe alles richtig verstanden.
@karolus: Die Zeilen, die du angegeben hast, gehören ja einer Bibliothek. Aus Angst und als Anfänger werde ich in keiner Bibliothek rumbasteln. Dazu bin ich zu unerfahren und zu neu in der Materie. Aber trotzdem vielen Dank für deinen Ratschlag.