Как записать в базу данных SQLite, используя Polars в Python?

import polars as pl
import sqlite3

conn = sqlite3.connect("test.db")
df = pl.DataFrame({"col1": [1, 2, 3]})

Согласно документации pl.write_database, мне нужно передать строку URI соединения, например. «sqlite:////path/to/database.db» для базы данных SQLite:

df.write_database("test_table", f"sqlite:////test.db", if_table_exists = "replace")

Однако я получил следующую ошибку:

OperationalError: (sqlite3.OperationalError) unable to open database file

Обновлено: Основываясь на ответе, установите SQLAlchemy с помощью команды pip install polars[sqlalchemy].

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
7
0
555
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот пример записи/чтения таблиц sqlite с использованием поляров.

Записать таблицу в базу данных (необходимо установить sqlalchemy).

import polars as pl

df = pl.DataFrame({"a": [1, 2, 3]})

df.write_database(
    "my_table",
    connection = "sqlite:///database.db",
    if_table_exists = "replace"
)

Чтение таблицы из базы данных (необходимо установить Connectorx).

pl.read_database_uri(query = "SELECT * FROM my_table", uri = "sqlite://database.db")

Обратите внимание на формат URI подключения.

  • sqlite:///:memory: (или sqlite://)
  • sqlite:///relative/path/to/file.db
  • sqlite:////absolute/path/to/file.db
  • sqlite:///c:/absolute/path/on/windows/file.db (благодарность @Thomas)

Просто чтобы завершить ответ... Если у вас есть абсолютный путь в Windows: sqlite:///c:/path/to/file.db.

Thomas 28.02.2024 17:18

@Thomas Спасибо, я обновил ответ (отдавая должное!)

Hericks 28.02.2024 17:20

По сути, проблема заключалась в том, что я использовал четыре косых черты (////) вместо трех. Я неправильно понял документацию, спасибо за разъяснения!

Péter Szilvási 28.02.2024 21:43
Ответ принят как подходящий

При работе с SQLite количество косых черт зависит от того, как вы получаете доступ к файлу sqlite. Если вы используете две косые черты, как предложено в комментариях, вы увидите следующее:

sqlalchemy.exc.ArgumentError: Invalid SQLite URL: sqlite://test.db
Valid SQLite URL forms are:
 sqlite:///:memory: (or, sqlite://)
 sqlite:///relative/path/to/file.db
 sqlite:////absolute/path/to/file.db

Похоже, что в вашем случае вы хотите использовать 3 косые черты, а не 4. Вместо этого попробуйте следующее:

df.write_database("test_table", f"sqlite:///test.db", if_table_exists = "replace")

Это будет рабочий пример, основанный на предоставленных вами фрагментах кода:

import polars as pl
import sqlite3

conn = sqlite3.connect("test.db")
df = pl.DataFrame({"col1": [1, 2, 3]})
df.write_database("test_table", f"sqlite:///test.db", if_table_exists = "replace")

Другие вопросы по теме