Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 24.05.2023
Сообщений: 23

Python. sqlite3 Проблема с отображением символов на хостинге

19.08.2023, 18:29. Показов 1110. Ответов 3

Студворк — интернет-сервис помощи студентам
У меня есть бот, он создает бд. Бота я залил на хостинг, открываю Бд через Ssh Vim, Vim постоянно перекодирует мне бд, в итоге получается куча @@@@@@@@. Подскажите пожалуйста как это можно исправить?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
import sqlite3
import json
 
def create_users_table():
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS users (
            user_id INTEGER PRIMARY KEY,
            username TEXT,
            name TEXT,
            platforms TEXT,
            is_verified INTEGER DEFAULT 0,
            is_banned INTEGER DEFAULT 0
        )
    ''')
 
    conn.commit()
    conn.close()
 
def set_ban_status(user_id, status):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('UPDATE users SET is_banned = ? WHERE user_id = ?', (status, user_id))
    conn.commit()
    conn.close()
 
def is_banned(user_id):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('SELECT is_banned FROM users WHERE user_id = ?', (user_id,))
    result = cursor.fetchone()
 
    conn.close()
 
    return bool(result[0]) if result else False
 
 
def set_verification_status(user_id, status):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('UPDATE users SET is_verified = ? WHERE user_id = ?', (status, user_id))
    conn.commit()
    conn.close()
 
def is_verified(user_id):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('SELECT is_verified FROM users WHERE user_id = ?', (user_id,))
    result = cursor.fetchone()
 
    conn.close()
 
    return bool(result[0]) if result else False
 
 
def save_user_to_database(user_data, platform_urls):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    user_id = user_data['user_id']
    username = user_data['username']
    name = user_data['name']
    platforms = user_data['platforms']
    
    # Создаем словарь для хранения готовых ссылок
    platform_links = {}
    for platform, social_media_id in platforms.items():
        if platform in platform_urls:
            platform_link = platform_urls[platform].format(social_media_id)
            platform_links[platform] = platform_link
    
    # Преобразуем словарь готовых ссылок в JSON-строку
    platform_links_json = json.dumps(platforms)
 
    cursor.execute('INSERT INTO users (user_id, username, name, platforms) VALUES (?, ?, ?, ?)',
                   (user_id, username, name, platform_links_json))
 
    conn.commit()
    conn.close()
 
 
def save_social_media_id_to_database(user_id, platform, social_media_id):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('SELECT username, name, platforms FROM users WHERE user_id = ?', (user_id,))
    user_data = cursor.fetchone()
    
    if user_data is not None:
        username, name, platforms_data = user_data
        platforms_dict = json.loads(platforms_data)
 
        platforms_dict[platform] = social_media_id
        updated_platforms_data = json.dumps(platforms_dict)
 
        cursor.execute('UPDATE users SET platforms = ? WHERE user_id = ?', (updated_platforms_data, user_id))
    else:
        platforms_dict = {platform: social_media_id}
        updated_platforms_data = json.dumps(platforms_dict)
        cursor.execute('INSERT INTO users (user_id, username, name, platforms) VALUES (?, ?, ?, ?)',
                       (user_id, None, None, updated_platforms_data))
 
    conn.commit()
    conn.close()
 
def get_links_from_database(user_id):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('SELECT platforms FROM users WHERE user_id = ?', (user_id,))
    platforms_data = cursor.fetchone()[0]
 
    conn.close()
 
    platforms = json.loads(platforms_data)
    links = [{'text': platform, 'url': url} for platform, url in platforms.items()]
    return links
 
def get_user_alias_from_database(user_id):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('SELECT name FROM users WHERE user_id = ?', (user_id,))
    result = cursor.fetchone()
 
    conn.close()
 
    return result[0] if result else None
 
def get_user_data_from_database(user_id):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('SELECT username, name, platforms FROM users WHERE user_id = ?', (user_id,))
    user_data = cursor.fetchone()
 
    conn.close()
 
    if user_data is not None:
        username, name, platforms_data = user_data
        platforms = json.loads(platforms_data)
        return {
            'username': username,
            'name': name,
            'platforms': platforms
        }
    else:
        return None
 
def update_platform_url_in_database(user_id, platform, platform_url):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('SELECT platforms FROM users WHERE user_id = ?', (user_id,))
    result = cursor.fetchone()
 
    if result is not None:
        platforms_data = result[0]
        platforms_dict = json.loads(platforms_data)
        
        platforms_dict[platform] = platform_url
        updated_platforms_data = json.dumps(platforms_dict)
 
        cursor.execute('UPDATE users SET platforms = ? WHERE user_id = ?', (updated_platforms_data, user_id))
        conn.commit()
    
    conn.close()
 
 
 
def save_updated_profile_data(user_id, name, platforms, platform_urls):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('SELECT platforms FROM users WHERE user_id = ?', (user_id,))
    result = cursor.fetchone()
 
    if result is not None:
        platforms_data = result[0]
        platforms_dict = json.loads(platforms_data)
 
        for platform, social_media_id in platforms.items():
            if platform in platform_urls:
                platform_link = platform_urls[platform].format(social_media_id)
                platforms_dict[platform] = platform_link
 
        updated_platforms_data = json.dumps(platforms_dict)
 
        cursor.execute('UPDATE users SET name = ?, platforms = ? WHERE user_id = ?', (name, updated_platforms_data, user_id))
        conn.commit()
    
    conn.close()
 
 
def update_user_name_in_database(user_id, new_name):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('UPDATE users SET name = ? WHERE user_id = ?', (new_name, user_id))
    conn.commit()
    conn.close()
 
def user_exists_in_database(user_id):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
 
    cursor.execute('SELECT user_id FROM users WHERE user_id = ?', (user_id,))
    result = cursor.fetchone()
 
    conn.close()
 
    return result is not None
 
if __name__ == '__main__':
    create_users_table()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.08.2023, 18:29
Ответы с готовыми решениями:

Проблема с отображением картинок на сайте при изменении их на хостинге
Добрый день! Ситуация следующая. Есть на сайт. Для примера, я выставил на него картинку. Потом я захотел её изменить. Я изменил...

Проблема с отображением символов в файле
Всем привет! Такой вопрос Нужно записать русский текст в кодировке UTF-8 в JSon файл Для получения JSon использую, собственно,...

Проблема с отображением русских символов
Народ, подскажите. Вот по клику на кнопке я создаю tabsheet и memo в нем, запихиваю в memo код html. Но русский отображается иероглифами,...

3
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
20.08.2023, 14:17
Vim ничего никогда не перекодирует) Смотрите в какой кодировке сохранена БД и какая кодировка установлена в настройках ssh-клиента. Они должны совпадать.
0
 Аватар для volodin661
6793 / 2290 / 348
Регистрация: 10.12.2013
Сообщений: 7,904
20.08.2023, 15:28
Цитата Сообщение от kazak Посмотреть сообщение
Vim ничего никогда не перекодирует
При начале редактирования существующего файла vim старается угадать кодировку,
ориентируясь на свой список кодировок хранящейся в переменной fileencodings ( fencs )
и пробуя кодировки из списка по очереди.

список кодировок по умолчанию: [ "ucs-bom, utf-8, default, latin1 ]

если кодировку удалось угадать, переменная fileencoding ( fenc ) принимает данное значение,
если же нет, то значение fenc - пустая строка и в качестве текущей кодировки будет использовано значение,
хранящееся в переменной encoding ( enc ).

если значение enc - не utf-8 или другие юникодные кодировки, то попытка обратной конверсии приведет к тому, что некоторые не-ASCII символы могут потеряться.

в вышеприведенном списке для fencs специальное значение 'ucs-bom' всегда должно стоять первым, а однобайтные кодировки типа latin1
последними, в противном случае они всегда будут срабатывать, поскольку определить ошибочна или не ошибочна однобайтовая кодировка нельзя.

Специальное значение default подразумевает кодировку, установленную в качестве системной ( например, в русском Windows это cp1251 )
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
22.08.2023, 14:24
Цитата Сообщение от J1npx Посмотреть сообщение
открываю Бд через Ssh Vim,
Файл sqlite является бинарным и не предназначен для просмотра и редактирования в текстовых редакторах.

Добавлено через 41 секунду
Скачайте файл к себе на компьютер и откройте клиентом, например, DB Browser for SQLite

Добавлено через 23 секунды
dbeaver-ce может быть поддерживает, не знаю.

Добавлено через 3 минуты
Посмотрел код, структура БД не очень, всего одна таблица.

Я бы сделал таблицы "Пользователи", "Платформы" и "Ссылки". Заодно от json можно будет избавиться. И какой-нибудь orm взял бы. https://ponyorm.org/ - например.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.08.2023, 14:24
Помогаю со студенческими работами здесь

Проблема с отображением русских символов
Уважаемые господа, помогите решить следующую проблему: есть wmf-файл, который отображается Java апплетом. wmf-файл в кодировке win-1251,...

Проблема с отображением символов колоды карт
s - строка, которая служит для вывода колоды карт. Проблема в том, что при переносе exe-файла на другую машину, символы...

Проблема с отображением русских символов в JSP
У меня проблема с отображением русских символов в JSP. В все то, что я пишу в файле руками отбражается нормально, а то что генерит сервлет...

Проблема с отображением русских символов при обращении к MySQL
Здравствуйте Столкнулся со следующей проблемой. Есть БД MySQL в которой таблицы с русскими символами и полями комментариев типа MEMO....

Python, Sqlite3
Сразу извинюсь я не опытный в этом деле. Делаю одну вещь которая должна грузить из .html документов определенный текст в bdSqlite3. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru