Найти - Пользователи
Полная версия: русские буквы в sql запросе
Начало » Базы данных » русские буквы в sql запросе
1
Чел_вТапКах
имеется код, где courier_dict является строкой на русском
            sql = u"INSERT INTO base_courier (Autono, FIO, Departmentid ) \
VALUES( '%s','%s','%s')" \
%( courier_dict['autono'], courier_dict['fio'], courier_dict['departmentid'])

cursor.execute(sql)
выводится ошибка
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 99-106: ordinal not in range
(256)
пробовал декодировать и енкодировать в утф и ср1251, кодировка файла стоит # -*- coding: utf-8 -*- , ну с ср1251 тоже не работала
подскажите что делать?
Андрей Светлов
Не сомневаюсь, что у меня та же версия базы данных при тех же настройках, что и у вас.
Поэтому советую:
sql = "INSERT INTO base_courier (Autono, FIO, Departmentid ) VALUES( ?, ?, ?)" 
cursor.execute(sql, courier_dict['autono'], courier_dict['fio'], courier_dict['departmentid'])
Чел_вТапКах
к сожалению пишет, может параметры в каком то другом виде передавать?
sql = "INSERT INTO base_courier (Autono, FIO, Departmentid ) VALUES( ?, ?, ?)" 
cursor.execute(sql, courier_dict['autono'], courier_dict['fio'], courier_dict['departmentid'])
Андрей Светлов
Уважаемый Чел_вТапКах.
Может, рискнете сбросить завесу секретности и укажете, какую БД вы используете?
Чел_вТапКах
import MySQLdb
Андрей Светлов
Имеем таблицу
CREATE TABLE `test`.`test` (
`id` integer NOT NULL AUTO_INCREMENT,
`name` varchar(256) ,
PRIMARY KEY (`id`)
)
ENGINE = InnoDB
CHARACTER SET utf8 COLLATE utf8_general_ci
COMMENT = 'Test table';
Имеем код
# -*- coding: utf-8 -*-

import MySQLdb as db

conn = db.connect(user='test', passwd='test', db='test',
use_unicode=True, charset='utf8')

c = conn.cursor()

c.execute('insert into test (name) values(%s)', (u'Вася Пупкин',))

c.execute('select * from test')
r = c.fetchone()

print r[0], r[1]
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