从任何SQL数据库导出表或查询到SQLite文件的CLI工具
项目描述
db-to-sqlite
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
)将在每次测试运行时被删除和重新创建。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。