python-3.x - 使用 sqllite3 和 sqllite 脚本处理
问题描述
我有一个带有 SQLite 扩展名的简单 SQLite 文件。
我可以通过一个用文档编写的简单语句连接到“:memory:”
con = sqlite3.connect(":memory:")
但是如果我有一个外部 SQLite 脚本(比如说example.sqlite
),并且如果我想连接到这个数据库,我应该怎么做?
我应该通过一些辅助软件执行这个脚本,然后以某种方式建立连接吗?但是在这种情况下怎么办?
我明白,如果我和
con = sqlite3.connect(":memory:")
然后我可以在我的 RAM 中创建数据库并以某种方式对其进行操作。但我不明白如何连接到“现有的”SQLite 数据库?一开始,我必须创建它,但是如何创建呢?我在 python 模块中找不到执行 SQL 脚本的命令。
例如,在 MySQL DB 的情况下,我使用 PyMySql 驱动程序,然后输入凭据,一切顺利
希望我说清楚了..这是我的第一个问题,我已经做好了最坏的打算。
解决方案
一开始我必须创建它,但是如何创建呢?
您不需要先在 SQLite 中创建数据库文件。如果文件存在,将打开一个连接。如果该文件不存在,它将为您创建。
con = sqlite3.connect('path/to/some/file.db') # or use :memory:
但是如果我有一个外部 sqlite 脚本(比如说 example.sqlite)并且如果我想连接到这个数据库我应该怎么做?
如果文件只是常规 SQL(创建表等,插入数据),您可以在连接上执行它:
with open('path/to/example.sqlite', encoding='utf8') as file:
sql = file.read()
con.executescript(sql)
con.commit()
这将创建 SQL 描述的数据库,当然它只需要完成一次。
如果你的脚本文件包含“点命令”之类的.import some.txt some_table
- 这些只能被 sqlite 命令行客户端理解,你不能通过 Python 执行它们。使用 shell 脚本/批处理文件来执行它们。
推荐阅读
- php - 使用 Vue 组件和 Blade 时,在 Laravel 中更新语言环境的最佳方法是什么?
- java - 无法构建管道无元素解码器[Gstreamer]
- javascript - 如何使用 get/fetch 语句传递参数(express)
- html - 如何根据表格的其他列值使按钮不可见 - Angular
- python - 访问附加到 dataframe1 中某些行的一些常量值并使用 dataframe2 中的值
- performance - 加快嵌套评估 (Isabelle/HOL)
- angular - 在 Angular 中处理 HTTP 错误的最佳实践 - Http 拦截器或单个错误处理程序
- mrtk - MRTK - 一个对象的多个剪切框
- ios - 当相机位置改变时调用函数
- java - 如何为我的控制器配置测试类以使用 Embedded Mongo?