2016-04-22 2 views
2

Ich versuche, arabische Wörter in Sqlite-Datenbank einzufügen, dann diese Wörter abzufragen. Was ich mit Blick auf das Ergebnis wie folgt zu mir zurück: ('\xd9\x85\xd8\xb1\xd8\xad\xd8\xa8\xd8\xa7\xd9\x8b',)Python: Wie utf-8 Zeichenfolge aus SQLite-Datenbank abfragen

so hier ist einfach Code für erklären, was ich tue:

# coding: utf-8 

import sys; reload(sys).setdefaultencoding("utf-8") 

import sqlite3 

class Database(object): 

    def execute_db(self, *args): 
     db = sqlite3.connect("sqlite3.db") 
     db.text_factory = str 
     cur = db.cursor() 
     data = True 
     try: 
      args = list(args) 
      args[0] = args[0].replace("%s", "?") 
      args = tuple(args) 
      cur.execute(*args) 
      arg = args[0].split()[0].lower() 
      if arg in ["update", "insert", "delete", "create"]: db.commit() 
     except Exception, data: 
      data = False 
      db.rollback() 
     db.commit() 
     db.close() 
     return data 

    def fetch_one(self, *args): 
     db = sqlite3.connect("sqlite3.db") 
     db.text_factory = str 
     try: cur = db.cursor() 
     except: return None 
     data = None 
     try: 
      args = list(args) 
      args[0] = args[0].replace("%s", "?") 
      args = tuple(args) 
      cur.execute(*args) 
      try: data = cur.fetchone() 
      except Exception, data: data = None 
     except Exception, data: 
      data = None 
      db.rollback() 
     db.close() 
     return data 


class Start(Database): 
    def __init__(self): 
     self.execute_db("create table test(title text)") 
     self.execute_db("insert into test(title) values(%s)", ("مرحباً",)) 

     self.write_query_into_file() 

    def write_query_into_file(self): 
     f = open("test.txt", "w+") 
     f.write(str(self.fetch_one("select title from test"))) 
     f.close() 

try: Start() 
except Exception as why: print why 

In diesem Beispiel erstellen I Test-Tabelle mit einem Wert Titel Ich füge Titel arabisches Wort dann wenn ich versuche, dieses Wort abzufragen und es in Datei zu schreiben, zeige mir das: ('\xd9\x85\xd8\xb1\xd8\xad\xd8\xa8\xd8\xa7\xd9\x8b',)

Wie kann ich es beheben?

+0

[nicht verwenden 'Reload (sys) .setdefaultencoding ("utf-8")'] (http://stackoverflow.com/q/3828723/4279) – jfs

+0

@JFSebastian die gleiche Sache nicht fest Mein Problem –

+0

Es gibt mehrere Probleme in Ihrem Code. – jfs

Antwort

1

Verwenden Sie den Typ unicode, um Text in Python darzustellen. Rufen Sie nicht str() für eine Unicode-Zeichenfolge auf (str() konvertiert in Byte in Python 2).

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 
from __future__ import print_function 
import io 
import sqlite3 

# insert Unicode into SQLite db 
conn = sqlite3.connect(':memory:') 
conn.execute("create table test(title text)") 
conn.execute("insert into test(title) values(?)", ("مرحباً",)) 

# print titles to file as text in utf-8 encoding 
with io.open('utf-8.txt', 'w', encoding='utf-8') as file: 
    for title, in conn.execute("select title from test"): 
     print(title, file=file) 
+0

Danke. Aber wusstest du, was das Problem in meinem Code ist? kann ich meinen Code reparieren? –

+0

@ Mr.zero: wo sind zu viele Probleme in Ihrem Code. Verwenden Sie stattdessen den Code aus meiner Antwort. Wenn es nicht klar ist, was eine der Zeilen im Code tut, Fragen. – jfs

+0

Eigentlich möchte ich es mit Flask verwenden. So gibt es eine Möglichkeit, dieses Wort zu drucken oder definieren Sie mit Wert wie: Hallo = conn.execute ("Titel aus Test auswählen") Und wenn ich es benutze. es sollte gut funktionieren. Ich meine was, wenn ich es nicht nur beim Schreiben von Dateien verwenden möchte. Danke nochmal. –

Verwandte Themen