Уведомления

Группа в Telegram: @pythonsu

#1 Март 19, 2007 23:03:48

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

не работает insert & update в mysqldb

proDiva
Есть такой sql-запрос:
“INSERT INTO fiz VALUES ('2000000000', ‘Normal’, ‘Алина’, ‘1982-04-07’, ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', 0, ’')”
Насчет списка полей после INTO и commit вам уже написали. Ну и замените 'Алина' на u'Alina'.



Офлайн

#2 Март 20, 2007 06:14:49

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

не работает insert & update в mysqldb

OlDer
Насчет списка полей после INTO и commit вам уже написали. Ну и замените ‘Алина’ на u'Alina'.
думаю лучше явно задавать кодировку - unicode('Алина','cp1251')



Офлайн

#3 Март 20, 2007 09:09:41

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

не работает insert & update в mysqldb

balu
Не зная мускуля, предположу, что вы не правильно написали запрос.
Запрос верный, в этом не сомневайтесь.
balu
Еще можно попробовать убрать умолчальную кодировку в БД - посмотреть как она будет себя вести.
в бд везде кодировка utf8, а вот у сервера по умолчанию была latin1, поменяла на utf8…. ничего не изменило, при команде print con.character_set_name() все равно выводится latin1.
OlDer
Ну и замените ‘Алина’ на u'Alina'.
не могу…. вся база должна быть на русском языке….. или вы предлагаете всех сотрудников банка заставить писать на латиннице?))
Я так предполагаю, что эта кодировка сидит где-то глубоко в сервере….. и наверно нужно переустановить сервер, но так не хочется)))
Метод: “con = MySQLdb.connect (host = ”localhost“,user = ”root“,db = ”test“,charset='utf8',use_unicode=True)
cur = con.cursor()
cur.execute(”SET NAMES ‘utf8’“)”
не срабатывает, а если писать unicode('Алина','latin1') все проходит без ошибок, но потом вся база становится иероглифами



Офлайн

#4 Март 20, 2007 09:20:54

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

не работает insert & update в mysqldb

proDiva
в бд везде кодировка utf8, а вот у сервера по умолчанию была latin1, поменяла на utf8…. ничего не изменило, при команде print con.character_set_name() все равно выводится latin1.
Поставь кодировку конкретной базы в None, правда, потом посмотри как будет работать upper с русскими буквами.



Офлайн

#5 Март 20, 2007 09:28:14

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

не работает insert & update в mysqldb

proDiva
а если писать unicode('Алина','latin1')
Почему latin1? Там должна быть кодировка в которой вводится строка.
А вообще я для тестирования написал небольшой пример и он работает у меня без проблем.
#!/usr/bin/python
from MySQLdb import connections
db = connections.Connection(db='testing',host='localhost',user='user',passwd='pass')
db.set_character_set('utf8')
curs = db.cursor()
inp = unicode(raw_input(), 'utf-8')
curs.execute("insert into t values ('" + inp +"', 'some_text')")
row=curs.execute("select * from t")
for i in range(row):
    rw = curs.fetchone()
    print rw[0], rw[1]



Офлайн

#6 Март 20, 2007 10:06:53

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

не работает insert & update в mysqldb

slivlen
Вы напишите, пожалуйста, такой же пример с данными на кириллице. Потому что примеры с латинницей у меня тоже работают.

slivlen
Почему latin1? Там должна быть кодировка в которой вводится строка.
Потому что в модуле connections.py запрос перекодируется в кодировке базы, которая запрашивается таким образом:
“if not charset:
charset = self.character_set_name()
self.set_character_set(charset)”
В базе везде упоминается utf8, но где-то все-таки сидит latin1, которая и выскакивает при запросе.



Офлайн

#7 Март 20, 2007 10:11:49

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

не работает insert & update в mysqldb

proDiva
Вы напишите, пожалуйста, такой же пример с данными на кириллице.
В raw_input я ввожу с консоли строку на русском. В результате в переменной inp - хранится строка с кириллицей. Так что разница между примерами не большая.
#!/usr/bin/python
#-*- coding: utf-8 -*-
from MySQLdb import connections
db = connections.Connection(db='coding',host='localhost',user='root',passwd='')
db.set_character_set('utf8')
curs = db.cursor()
#inp = unicode(raw_input(), 'utf-8')
inp = unicode('кириллица', 'utf-8')
curs.execute("insert into t values ('" + inp +"', 'some_text')")
row=curs.execute("select * from t")
for i in range(row):
    rw = curs.fetchone()
    print rw[0], rw[1]



Офлайн

#8 Март 20, 2007 10:57:40

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

не работает insert & update в mysqldb

slivlen
Действительно, так сработало….. все без ошибок, но осталась загадка…… после команды con.set_character_set('utf8'), когда запрашиваю print con.character_set_name() все равно выходит latin1)))



Офлайн

#9 Март 20, 2007 11:49:12

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

не работает insert & update в mysqldb

proDiva
после команды con.set_character_set('utf8'), когда запрашиваю print con.character_set_name() все равно выходит latin1)))
у меня тоже самое, похоже что это проблема библиотеки.



Офлайн

#10 Март 20, 2007 12:04:29

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

не работает insert & update в mysqldb

Не знаю, что я сделала, но пример перестал работать, все та же ошибка:
Traceback (most recent call last):
File “C:/cb/1.py”, line 10, in -toplevel-
curs.execute(sql)
File “C:\Python24\Lib\site-packages\MySQLdb\cursors.py”, line 146, in execute
query = query.encode(charset)
UnicodeEncodeError: ‘latin-1’ codec can't encode characters in position 64-68: ordinal not in range(256)

Вот код:

#!/usr/bin/python
#-*- coding: utf-8 -*-
from MySQLdb import connections

db = connections.Connection(db='cb_test',host='localhost',user='root',passwd='1111')
db.set_character_set('utf8')
curs = db.cursor()

sql = unicode(“INSERT INTO fiz (NUMBER, FIO, DataRozhd) VALUES ('2000000001', ‘Алина’, ‘1982-04-07’); COMMIT”, ‘utf-8’)
curs.execute(sql)

row=curs.execute(“select * from fiz where NUMBER = ‘2000000001’;”)
for i in range(row):
rw = curs.fetchone()
print rw, rw



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version