Найти - Пользователи
Полная версия: не работает insert & update в mysqldb
Начало » Базы данных » не работает insert & update в mysqldb
1 2 3
OlDer
proDiva
Есть такой sql-запрос:
“INSERT INTO fiz VALUES ('2000000000', ‘Normal’, ‘Алина’, ‘1982-04-07’, ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', ’', ‘', 0, ’')”
Насчет списка полей после INTO и commit вам уже написали. Ну и замените 'Алина' на u'Alina'.
pythonwin
OlDer
Насчет списка полей после INTO и commit вам уже написали. Ну и замените ‘Алина’ на u'Alina'.
думаю лучше явно задавать кодировку - unicode('Алина','cp1251')
proDiva
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') все проходит без ошибок, но потом вся база становится иероглифами
balu
proDiva
в бд везде кодировка utf8, а вот у сервера по умолчанию была latin1, поменяла на utf8…. ничего не изменило, при команде print con.character_set_name() все равно выводится latin1.
Поставь кодировку конкретной базы в None, правда, потом посмотри как будет работать upper с русскими буквами.
slivlen
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]
proDiva
slivlen
Вы напишите, пожалуйста, такой же пример с данными на кириллице. Потому что примеры с латинницей у меня тоже работают.
slivlen
Почему latin1? Там должна быть кодировка в которой вводится строка.
Потому что в модуле connections.py запрос перекодируется в кодировке базы, которая запрашивается таким образом:
“if not charset:
charset = self.character_set_name()
self.set_character_set(charset)”
В базе везде упоминается utf8, но где-то все-таки сидит latin1, которая и выскакивает при запросе.
slivlen
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]
proDiva
slivlen
Действительно, так сработало….. все без ошибок, но осталась загадка…… после команды con.set_character_set('utf8'), когда запрашиваю print con.character_set_name() все равно выходит latin1)))
Viper
proDiva
после команды con.set_character_set('utf8'), когда запрашиваю print con.character_set_name() все равно выходит latin1)))
у меня тоже самое, похоже что это проблема библиотеки.
proDiva
Не знаю, что я сделала, но пример перестал работать, все та же ошибка:
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
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