Найти - Пользователи
Полная версия: SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.
Начало » Базы данных » SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.
1 2
MetalHead
Добрый день. Собственно кириллическая строка записывается кракозябрами в базу данных в виде Категорька Как быть? По умолчанию SQLAlchemy же utf-8, версия питона 2,7. Строку обрабатываю u'строка'. Спасибо.
4kpt_III
Деклоративный стиль? Код поля и коннектора приведите.
MetalHead
модель:
# -*- coding: utf-8 -*-
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey
class BaseClass:
    def __init__(self):
        self.BaseDeclarative = declarative_base()
        self.BaseEngine = create_engine('sqlite:///englishdb.db', encoding='utf-8')
main_object = BaseClass()
class Category(main_object.BaseDeclarative):
    __tablename__ = 'category'
    id = Column(Integer, primary_key=True)
    title = Column(String(250), nullable=False)
class Words(main_object.BaseDeclarative):
    __tablename__ = 'words'
    id = Column(Integer, primary_key=True)
    rusword = Column(String(250))
    engword = Column(String(250))
    true = Column(Integer, default=0)
    trial = Column(Integer, default=30)
    category_id = Column(Integer, ForeignKey('category.id'), default=1)
main_object.BaseDeclarative.metadata.create_all(main_object.BaseEngine)
сессия и взаимодействия:
# -*- coding: utf-8 -*-
from models import main_object as model
from models import Category, Words
from sqlalchemy.orm import sessionmaker
class InitQueries:
    def __init__(self):
        model.BaseDeclarative.metadata.bind = model.BaseEngine
        DBSession = sessionmaker(bind=model.BaseEngine)
        self.session = DBSession()
init = InitQueries()
class DbFunc: 
    def addcategory(self, title):
        try:
            category = Category(title=title)
            init.session.add(category)
            init.session.commit()
            print("Category added!")
        except:
            print("произошла ошибка!")
            pass
        
    def addrow(self, rusword, engword, category_id=1):
        try:
            row = Words(rusword=rusword, engword=engword, category_id=category_id)
            init.session.add(row)
            init.session.commit()     
        except:
            print("Что то не так. Ошибка в запросе!")
            pass
    def deleterow(self, ident):
        try:
            row = init.session.query(Words).filter(Words.id == ident).one()
            init.session.delete(row)
            init.session.commit()
        except:
            print("Ошибка удаления!")
            pass
function = DbFunc()

4kpt_III
Попробуйте поменять String на Unicode или в create_engine параметром передать convert_unicode=True.
MetalHead
4kpt_III
Так же. Не хочет сохранять в нормальном виде.
4kpt_III
Базу не забыли снести предварительно?
MetalHead
4kpt_III
После каждой правки сносил(удалял файл.db).
sander
MetalHead
а какой командой базу создаете?
MetalHead
sander
Как обычно, модель же есть. При запросе автоматом все создается.
sander
MetalHead
кодировка в базе какая?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB