
LeiDruid
09.05.2019
09:27:05
Использую sqlalchemy с postgres.
При попытке сунуть json с юникодом в таблицу в поле JSON через ttable.update() получаю в результате вот такое в таблице:
\u0420\u0443\u0441\u0441\u043a\u0438\u0439
в сreate_engine есть client_encoding='utf8', но пробовал и без.
Python: 3.6
Postgresql: 9.6
sqlalchemy: 1.2.7
Кодировка в переменной перед insert'ом нормальная

User
09.05.2019
09:28:11
sql = "SELECT car_mark FROM filters WHERE user_id = %s"
val = (message.from_user.id)
mycursor.execute(sql, (val,))
# bot.send_message(message.from_user.id, exec)
Люди как можно получить дату из БД в переменную
MySql юзаю

Google

LeiDruid
09.05.2019
09:28:30
Очевидно, какая-то проблема внутри sqlalchemy, но что-то ничего нагуглить не смог

Sergey
09.05.2019
09:30:02

User
09.05.2019
09:30:39
нет я слово дата
имел ввиду как информацию

LeiDruid
09.05.2019
09:31:34

Alex
09.05.2019
09:31:39

LeiDruid
09.05.2019
09:32:23

Alex
09.05.2019
09:32:54
зыы: как ты эту строку получил? ты уверен, что там именно repr юникодный как текст записан, а не то чем ты смотришь из базы просто отображает тебе строку как escape-последовательность?
хотя бы сделай select char_length

LeiDruid
09.05.2019
09:35:00
Вот кусок с инсертом:
istmt = ttable.update().where(ttable.c.id==i.id).values(
group=i.group,
locale=i.locale,
project_id=i.project_id,
content=i.content
)
t.execute(istmt)
print(i.content) в консоль показывает нормальную кодировку

Google

Alex
09.05.2019
09:36:31
а… черт поле JSON
я не заметил

LeiDruid
09.05.2019
09:37:30
я не заметил
ну да, так бы я его просто как текст сложил через psycopg

Alex
09.05.2019
09:38:08
надо бы проверить, но ты ведь в курсе что JSON в общем случае не умеет в юникод?

LeiDruid
09.05.2019
09:38:26
почему это ?

Alex
09.05.2019
09:38:31
и экранирует все что не вписывается в ASCII
это нормально

LeiDruid
09.05.2019
09:38:38
Оно же в первой табличке лежит как-то в unicode

Alex
09.05.2019
09:42:11
ты покажи структуру таблиц и что и как лежит?

LeiDruid
09.05.2019
09:43:42
https://pastebin.com/vK9ADdYr
Одинаковые таблицы
Мне нужно между ними контент синхронизировать

Alex
09.05.2019
09:44:08
верней по стандарту оба варианта - валидный JSON. но некоторые реализации (например json в python) по-умолчанию экранирует ен ASCII символы
в запросе content у тебя это какого типа объект?

LeiDruid
09.05.2019
09:45:24
минутку
<class 'dict'>
Так вроде и должно быть

Alex
09.05.2019
09:51:00
а покажи-ка мне SHOW CLIENT_ENCODING у себя в psql?

LeiDruid
09.05.2019
09:52:11
client_encoding
-----------------
UTF8
в обеих базах

Google

Alex
09.05.2019
09:56:19
покажи что у тебя в дикте, сделай repr

LeiDruid
09.05.2019
09:57:18
{'language': {'code': 'ru', 'description': 'Русский',
и т.д
т.е. в stdout все хорошо

Alex
09.05.2019
10:03:09
и еще вопрос, покажи как у тебя таблица описана?
в алхимии

LeiDruid
09.05.2019
10:05:12
https://pastebin.com/avDPqpQH

Alex
09.05.2019
10:05:41
JSON - это sqlalchemy.types.JSON?
окей, в общем проблема похоже ясна. SQLA использует стандартный json.dumps \ json.loads для серилализации \ десериализации JSON.
если иное не указано в диалекте
ты можешь это поведение изменить, передав json_serializer= \ json_deserializer= аргументы в create_engine
в твоем случае должно помочь:
create_engine(…
json_serializer=functools.partial(json.dumps, ensure_ascii=False)
)

LeiDruid
09.05.2019
10:22:59
ага, спасибо, попробую
дааа ))) спасибо, помогло!

Mariya
09.05.2019
10:26:08
Есть ли возможность в программе с графикой открыть стандартный менеджер файлов windows?
Например, при нажатии определенной кнопки отрывается окно со стандартным менеджером файлов, пользователь выбирает нужный ему файл, и путь к этому файлу записываться в переменную для дальнейшей работы с ними.
Версия питона 3.6

Suren
09.05.2019
10:27:38

Mariya
09.05.2019
10:28:48
Спасибо!

Alex
09.05.2019
10:30:57
дааа ))) спасибо, помогло!
и этот и предыдущий вариант - был валидный JSON, так как стандарт допускает что любые символы могут экранироваться, то никто не гарантирует что на выходе будет идентичное текстовое представление что и на входе.

Google

Alex
09.05.2019
10:31:31
всегда есть возможность дернуть его через Win32API ^_^

Admin
ERROR: S client not available

User
09.05.2019
10:33:04
counter = 0
for x, y, z in zip(result, result1, result2):
counter+=1
bot.send_message(message.from_user.id, (x + y + z))
Бот высылает лишь переменную x
как выслать все 3 в одной строке?\

Tigran
09.05.2019
10:34:13
а ты уверен, что в y и z непустые строки?

User
09.05.2019
10:34:21
уверен
('Vauxhall', 'Viva', 'Боровской') запринтил
они как массив

Tigran
09.05.2019
10:37:48
и бот присылает только первое слово?

User
09.05.2019
10:38:26
да

Tigran
09.05.2019
10:38:39
?

Alex
09.05.2019
10:40:53
быть такого не может
кажется черепашка пиздит

Сергей
09.05.2019
10:41:13

Tigran
09.05.2019
10:41:52
пошла мистика

User
09.05.2019
10:45:12

Alex
09.05.2019
10:49:19
+
эм... а ну покажи весь свой код на pastebin

Aragaer
09.05.2019
12:15:13
чот возник вопрос по структуре данных

Nite
09.05.2019
12:15:31
с днем победы хохлищ! твой прадед тоже за эту землю бился
на сим хватит о политике

Google

Nite
09.05.2019
12:15:43
)

Aragaer
09.05.2019
12:15:57
есть писатель (может быть не один даже), он в эту структуру кладет объекты. Размер структуры ограничен, поэтому начиная с какого-то момента новые объекты начинают перетирать старые (по сути - по возрасту)

FUGO XXX
09.05.2019
12:16:21
Не сегодня

Aragaer
09.05.2019
12:16:32
а есть читатели (больше одного), которые могут из этой структуры реквестить объекты (как правило опять же по возрасту), а могут "ожидать" появления объектов после определенного момента

Denis
09.05.2019
12:16:33

Aragaer
09.05.2019
12:16:59
вот я привык к тому, что кольцевой буфер это по сути очередь

Nite
09.05.2019
12:17:06
у меня похожий вопрос