2011-04-20 10 views
10

Mam model SQLAlchemy z kolumną Unicode. Czasami wstawiam do niego wartości Unicode (u'Value '), ale czasami wstawiam również ciągi ASCII. Jaki jest najlepszy sposób na zrobienie tego? Kiedy wstawiam ciągi ASCII ze znakami specjalnymi, otrzymuję to ostrzeżenie:Właściwy sposób wstawiania łańcuchów do kolumny SQLAlchemy Unicode

SAWarning: Unicode type received non-unicode bind param value ... 

Jak tego uniknąć? Jaki jest właściwy sposób wstawiania różnych typów ciągów?

Odpowiedz

5

poddaszu jest kilka opcji:

  1. wyłączyć wszystkie ostrzeżenia sqlalchemy z warnings.simplefilter('ignore', sqlalchemy.exc.SAWarning).
  2. Wyłącz tylko to ostrzeżenie o bardziej szczegółowej specyfikacji filtra według modułu i pościeli lub wiadomości, np. warnings.filterwarnings('ignore', '^Unicode type received non-unicode bind param value', sqlalchemy.exc.SAWarning).
  3. Użyj typu String(convert_unicode=True) zamiast Unicode.
  4. Przemyśl problem i zmień kod, aby używał kodowania Unicode nawet dla ciągów ASCII.
+3

Ty attemping usuwania problemów zamiast rozwiązywania numer it.About 3: Oficjalna dokumentacja 'sqlalchemy' mówi o użyciu' Unicode type', ale mówisz, użyj 'String (convert_unicode = True)', mam ten sam problem, ale nie sądzę, że sqlalchemy rozwiązuje się z 'disable warning' ponieważ ma' clean kod "nie" zabrudzony ". – PersianGulf

0

Należy zdefiniować klasę stołowego i konstruktora jako takie:

class User(declarative_base()): 
    _tablename__ = 'user' 
    name = Column(Unicode(200, convert_unicode=False)) 
    textfield = Column(UnicodeText(convert_unicode=False)) 

user = Table('user', MetaData(), 
Column('name', Unicode(200, convert_unicode=False), nullable=False), 
Column('textfield', UnicodeText(convert_unicode=False), nullable=False), 
) 

Oczywiście, nie należy zapominać, aby dołączyć URI+"charset=utf8" dla create_engine function

Powiązane problemy