跳转到主要内容

从任何SQL数据库导出表或查询到SQLite文件的CLI工具

项目描述

db-to-sqlite

PyPI Changelog Tests License

CLI工具,用于从任何SQL数据库导出表或查询到SQLite文件。

安装

按照以下方式从PyPI安装

pip install db-to-sqlite

如果您想与MySQL一起使用,可以安装额外的依赖项,如下所示

pip install 'db-to-sqlite[mysql]'

在OS X上安装mysqlclient库可能很棘手 - 我发现此配方有效(在安装db-to-sqlite之前运行该配方)。

对于PostgreSQL,使用以下内容

pip install 'db-to-sqlite[postgresql]'

用法

Usage: db-to-sqlite [OPTIONS] CONNECTION PATH

  Load data from any database into SQLite.

  PATH is a path to the SQLite file to create, e.c. /tmp/my_database.db

  CONNECTION is a SQLAlchemy connection string, for example:

      postgresql://localhost/my_database
      postgresql://username:passwd@localhost/my_database

      mysql://root@localhost/my_database
      mysql://username:passwd@localhost/my_database

  More: https://docs.sqlalchemy.org.cn/en/13/core/engines.html#database-urls

Options:
  --version                     Show the version and exit.
  --all                         Detect and copy all tables
  --table TEXT                  Specific tables to copy
  --skip TEXT                   When using --all skip these tables
  --redact TEXT...              (table, column) pairs to redact with ***
  --sql TEXT                    Optional SQL query to run
  --output TEXT                 Table in which to save --sql query results
  --pk TEXT                     Optional column to use as a primary key
  --index-fks / --no-index-fks  Should foreign keys have indexes? Default on
  -p, --progress                Show progress bar
  --postgres-schema TEXT        PostgreSQL schema to use
  --help                        Show this message and exit.

例如,要将PostgreSQL数据库中blog_entry表的内容保存到名为blog.db的本地文件,您可以这样做

db-to-sqlite "postgresql://localhost/myblog" blog.db \
    --table=blog_entry

您可以多次指定--table

您还可以保存所有表中的数据,有效地创建整个数据库的SQLite副本。任何外键关系都将被检测并添加到SQLite数据库中。例如

db-to-sqlite "postgresql://localhost/myblog" blog.db \
    --all

当运行--all时,您可以使用--skip指定要跳过的表

db-to-sqlite "postgresql://localhost/myblog" blog.db \
    --all \
    --skip=django_migrations

如果您想保存自定义SQL查询的结果,请这样做

db-to-sqlite "postgresql://localhost/myblog" output.db \
    --output=query_results \
    --sql="select id, title, created from blog_entry" \
    --pk=id

--output选项指定应包含查询结果的表。

使用db-to-sqlite与PostgreSQL模式

如果您想从PostgreSQL数据库中复制的表不在默认模式中,您可以使用--postgres-schema选项指定一个备选模式

db-to-sqlite "postgresql://localhost/myblog" blog.db \
    --all \
    --postgres-schema my_schema

使用db-to-sqlite与MS SQL

获取以下MS SQL连接所需连接字符串的最佳方法是使用标准库中的urllib,如下所示

params = urllib.parse.quote_plus(
    "DRIVER={SQL Server Native Client 11.0};"
    "SERVER=localhost;"
    "DATABASE=my_database;"
    "Trusted_Connection=yes;"
)

上述将解析为

DRIVER%3D%7BSQL+Server+Native+Client+11.0%7D%3B+SERVER%3Dlocalhost%3B+DATABASE%3Dmy_database%3B+Trusted_Connection%3Dyes

然后您可以在下面的odbc_connect中使用上述字符串

mssql+pyodbc:///?odbc_connect=DRIVER%3D%7BSQL+Server+Native+Client+11.0%7D%3B+SERVER%3Dlocalhost%3B+DATABASE%3Dmy_database%3B+Trusted_Connection%3Dyes
mssql+pyodbc:///?odbc_connect=DRIVER%3D%7BSQL+Server+Native+Client+11.0%7D%3B+SERVER%3Dlocalhost%3B+DATABASE%3Dmy_database%3B+UID%3Dusername%3B+PWD%3Dpasswd

使用db-to-sqlite与Heroku Postgres

如果您在Heroku上运行应用程序并使用他们的Postgres数据库产品,您可以使用heroku config命令访问兼容的连接字符串

$ heroku config --app myappname | grep HEROKU_POSTG
HEROKU_POSTGRESQL_OLIVE_URL: postgres://username:password@ec2-xxx-xxx-xxx-x.compute-1.amazonaws.com:5432/dbname

您可以将此传递给db-to-sqlite以创建一个包含您的Heroku实例数据的本地SQLite数据库

您甚至可以使用bash单行命令来完成此操作

$ db-to-sqlite $(heroku config --app myappname | grep HEROKU_POSTG | cut -d: -f 2-) \
    /tmp/heroku.db --all -p
1/23: django_migrations
...
17/23: blog_blogmark
[####################################]  100%
...

相关项目

  • Datasette:用于探索和发布数据的工具。与使用db-to-sqlite生成的SQLite文件配合使用效果很好。
  • sqlite-utils:用于操作SQLite数据库的Python CLI实用程序和库。
  • csvs-to-sqlite:将CSV文件转换为SQLite数据库。

开发

要本地设置此工具,首先检出代码。然后创建一个新的虚拟环境

cd db-to-sqlite
python3 -m venv venv
source venv/bin/activate

或者如果您正在使用pipenv

pipenv shell

现在安装依赖项和测试依赖项

pip install -e '.[test]'

要运行测试

pytest

如果您没有安装它们的额外依赖项,这将跳过针对MySQL或PostgreSQL的测试。

您可以通过以下方式安装这些额外依赖项

pip install -e '.[test_mysql,test_postgresql]'

如果您无法安装test_postgresql额外依赖项所使用的psycopg2依赖项,则可以使用pip install psycopg2-binary

有关在macOS上运行测试和安装mysqlclient依赖项的提示,请参阅使用Homebrew运行MySQL服务器

PostgreSQL和MySQL测试默认期望在localhost上的服务器上运行。您可以使用环境变量将它们指向不同的测试数据库服务器

  • MYSQL_TEST_DB_CONNECTION - 默认为mysql://root@localhost/test_db_to_sqlite
  • POSTGRESQL_TEST_DB_CONNECTION - 默认为postgresql://localhost/test_db_to_sqlite

您在环境变量中指定的数据库(默认为test_db_to_sqlite)将在每次测试运行时被删除和重新创建。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

db-to-sqlite-1.5.tar.gz (14.1 kB 查看哈希值)

上传时间

构建分发

db_to_sqlite-1.5-py3-none-any.whl (16.3 kB 查看哈希值)

上传时间 Python 3

由以下支持