Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 20, 2015 14:57:27

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.

Добрый день. Собственно кириллическая строка записывается кракозябрами в базу данных в виде Категорька Как быть? По умолчанию SQLAlchemy же utf-8, версия питона 2,7. Строку обрабатываю u'строка'. Спасибо.

Офлайн

#2 Апрель 20, 2015 15:01:05

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.

Деклоративный стиль? Код поля и коннектора приведите.

Офлайн

#3 Апрель 20, 2015 15:04:40

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.

модель:

# -*- 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()

Отредактировано MetalHead (Апрель 20, 2015 15:05:05)

Офлайн

#4 Апрель 20, 2015 15:19:32

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.

Попробуйте поменять String на Unicode или в create_engine параметром передать convert_unicode=True.

Офлайн

#5 Апрель 20, 2015 16:53:40

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.

4kpt_III
Так же. Не хочет сохранять в нормальном виде.

Офлайн

#6 Апрель 20, 2015 19:30:10

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.

Базу не забыли снести предварительно?

Офлайн

#7 Апрель 20, 2015 20:13:35

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.

4kpt_III
После каждой правки сносил(удалял файл.db).

Офлайн

#8 Апрель 20, 2015 20:41:17

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.

MetalHead
а какой командой базу создаете?

Офлайн

#9 Апрель 21, 2015 08:47:38

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.

sander
Как обычно, модель же есть. При запросе автоматом все создается.

Офлайн

#10 Апрель 21, 2015 09:11:03

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

SQLAlchemy. Добавление кирилицы в БД в виде кракозябров.

MetalHead
кодировка в базе какая?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version