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].






Вот пример записи/чтения таблиц 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 подключения.
@Thomas Спасибо, я обновил ответ (отдавая должное!)
По сути, проблема заключалась в том, что я использовал четыре косых черты (////) вместо трех. Я неправильно понял документацию, спасибо за разъяснения!
При работе с 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")
Просто чтобы завершить ответ... Если у вас есть абсолютный путь в Windows:
sqlite:///c:/path/to/file.db.