Некоторые наблюдения
Итак, вы получаете встречи (одно за другим) от пользователя и сохраняете их в строках таблицы.
Чтобы сохранить свои данные в базе данных, вы используете метод 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
- Вы не можете сохранить следующую встречу в «следующем столбце», потому что SQLite имеет схему, то есть каждая таблица предопределенаколичество столбцов с или без типа и ограничений.Поскольку количество встреч не определено и у вас не может быть таблицы с неопределенным числом столбцов.
- Более того, реляционные базы данных (SQLite, MySQL и т. Д.) Не предназначены для хранения данных без схемы (как в вашем случае).
- Каждая строка в SQLite должна представлять запись / экземпляр класса / сущность.Вот почему новая строка создается каждый раз, когда вы звоните
add_item()
.Вот как это работает.Поэтому, когда вы хотите перечислить все встречи пользователя, вы получаете набор строк, а не одну строку с N встречами, хранящимися в отдельных столбцах.
Кстати, я не понял, что вы подразумеваете под этим:
Я хочу сохранить текст в ряд , как мы делаем в phpи sql
Что делать дальше
На мой взгляд, у вас есть следующие варианты на выбор:
- Переключение на базы данных NoSQL, такие как MongoDBили Redis например.Большинство баз данных NoSQL не имеют схемы, вы можете вставить в нее данные произвольной структуры и можете хранить
list
объектов.Вы можете использовать один документ JSON в MongoDB, представляющий пользователя и его встречи, или list
встреч для ключа пользователя chat_id в Redis. - Если вы хотите остаться с реляционными базами данных, вы можете переключиться набаза данных, которая поддерживает
list
в качестве типа столбца.SQLite не поддерживает этот тип данных, но Postgres имеет .Причина, по которой SQLite не имеет этой функции, заключается в том, что она разработана для простой и переносимой системы (одна база данных = один файл, но также может быть полностью сохранена в ОЗУ). - Оставьте текущую схему БД и таблицу в том виде, как она есть, исохраняйте встречи в строках , потому что это кажется подходящим для этой простой задачи.При необходимости измените свой код для этой структуры данных БД.
Вы можете задать дополнительные вопросы в разделе комментариев, если хотите.