создание хорошей базы данных для бота telegram на python - PullRequest
0 голосов
/ 16 июня 2019

эта функция позволяет мне хранить переменную в одном столбце, как я могу сохранить следующую переменную в следующем столбце?

Код регистрирует пользователя, но не выполняет перекрестную проверку (пользователь может зарегистрировать несколькораз), как мне сделать хорошую базу данных для приема на прием.Я не знаю, с чего начать, даже небольшая помощь будет оценена.

1 Ответ

0 голосов
/ 19 июня 2019

Некоторые наблюдения

Итак, вы получаете встречи (одно за другим) от пользователя и сохраняете их в строках таблицы.

Чтобы сохранить свои данные в базе данных, вы используете метод add_item():

def add_item(self, item_text, owner):
    stmt = "INSERT INTO items (description, owner) VALUES (?, ?)"
    args = (item_text, owner)
    self.conn.execute(stmt, args)
    self.conn.commit()

И схема таблицы:

CREATE TABLE IF NOT EXISTS items (description text, owner text)

И в соответствии со строкой self.conn = sqlite3.connect(dbname) вы используете базу данных SQLite.

Проблема

эта функция позволяет мне хранить переменную в одном столбце, как я могу сохранить следующую переменную в следующем столбце?
...
текст, который я получаю от пользователя, который сохраняется в одном столбце, иследующий текст хранится под ним.но я хочу сохранить текст в строке, как мы делаем в php и sql

  1. Вы не можете сохранить следующую встречу в «следующем столбце», потому что SQLite имеет схему, то есть каждая таблица предопределенаколичество столбцов с или без типа и ограничений.Поскольку количество встреч не определено и у вас не может быть таблицы с неопределенным числом столбцов.
  2. Более того, реляционные базы данных (SQLite, MySQL и т. Д.) Не предназначены для хранения данных без схемы (как в вашем случае).
  3. Каждая строка в SQLite должна представлять запись / экземпляр класса / сущность.Вот почему новая строка создается каждый раз, когда вы звоните add_item().Вот как это работает.Поэтому, когда вы хотите перечислить все встречи пользователя, вы получаете набор строк, а не одну строку с N встречами, хранящимися в отдельных столбцах.

Кстати, я не понял, что вы подразумеваете под этим:

Я хочу сохранить текст в ряд , как мы делаем в phpи sql

Что делать дальше

На мой взгляд, у вас есть следующие варианты на выбор:

  • Переключение на базы данных NoSQL, такие как MongoDBили Redis например.Большинство баз данных NoSQL не имеют схемы, вы можете вставить в нее данные произвольной структуры и можете хранить list объектов.Вы можете использовать один документ JSON в MongoDB, представляющий пользователя и его встречи, или list встреч для ключа пользователя chat_id в Redis.
  • Если вы хотите остаться с реляционными базами данных, вы можете переключиться набаза данных, которая поддерживает list в качестве типа столбца.SQLite не поддерживает этот тип данных, но Postgres имеет .Причина, по которой SQLite не имеет этой функции, заключается в том, что она разработана для простой и переносимой системы (одна база данных = один файл, но также может быть полностью сохранена в ОЗУ).
  • Оставьте текущую схему БД и таблицу в том виде, как она есть, исохраняйте встречи в строках , потому что это кажется подходящим для этой простой задачи.При необходимости измените свой код для этой структуры данных БД.

Вы можете задать дополнительные вопросы в разделе комментариев, если хотите.

...