python 操作远程的sqlite数据库

news/2024/10/8 7:20:27/文章来源:https://www.cnblogs.com/music-liang/p/18450890

要通过 Python 连接远程服务器上的 SQLite 数据库,必须注意一点:SQLite 是一个文件级数据库,它通常不支持像 MySQL 或 PostgreSQL 那样通过网络直接访问。如果数据库在远程服务器(如 `192.168.21.21`),你通常需要采取以下方法:

### 1. 通过 SSH 连接
因为 SQLite 是一个文件数据库,最常见的方法是通过 SSH 连接到远程服务器,执行 SQLite 的相关操作。可以使用 Python 的 `paramiko` 库来通过 SSH 执行命令或文件操作。

下面是通过 Python 使用 `paramiko` 库在远程服务器上执行 `VACUUM` 操作的步骤。

#### 步骤 1: 安装 `paramiko` 库
你需要先安装 `paramiko` 库来进行 SSH 连接:
```bash
pip install paramiko
```

#### 步骤 2: 使用 `paramiko` 执行 `VACUUM` 命令

```python
import paramiko

# 设置远程服务器的连接信息
hostname = '192.168.21.21' # 远程服务器的IP地址
port = 22 # SSH端口,通常为22
username = 'your_username' # 远程服务器的用户名
password = 'your_password' # 远程服务器的密码

# 要操作的SQLite数据库路径
sqlite_db_path = '/path/to/your/database.db'

# 构建 SQLite VACUUM 命令
command = f"sqlite3 {sqlite_db_path} 'VACUUM;'"

# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
# 连接到远程服务器
ssh.connect(hostname, port, username, password)

# 执行 VACUUM 命令
stdin, stdout, stderr = ssh.exec_command(command)

# 打印执行结果
print(stdout.read().decode())
print(stderr.read().decode())

finally:
# 关闭连接
ssh.close()
```

#### 说明
- `hostname`、`username`、`password` 是你远程服务器的 SSH 登录凭据。
- `sqlite_db_path` 是你在远程服务器上 SQLite 数据库文件的路径。
- `command` 是要在远程服务器上执行的 `sqlite3` 命令,包含了 `VACUUM`。

通过这种方式,你就可以远程连接服务器,并执行 `VACUUM` 操作来压缩数据库。

### 2. 如果你想直接操作远程的 SQLite 文件

另一种方法是将远程的 SQLite 文件复制到本地,进行操作,然后再传回去。这可以通过 `scp` 或 Python 的 `paramiko` 来完成:

#### 复制文件到本地(使用 paramiko)

```python
import paramiko
import os

hostname = '192.168.21.21'
port = 22
username = 'your_username'
password = 'your_password'
remote_db_path = '/path/to/your/database.db'
local_db_path = './database.db'

# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 使用 SCP 复制数据库到本地
try:
ssh.connect(hostname, port, username, password)

sftp = ssh.open_sftp()
sftp.get(remote_db_path, local_db_path) # 从远程复制到本地
sftp.close()

print(f"成功复制 {remote_db_path} 到本地 {local_db_path}")

finally:
ssh.close()

# 本地执行 VACUUM 操作
import sqlite3

conn = sqlite3.connect(local_db_path)
cursor = conn.cursor()
cursor.execute('VACUUM')
conn.commit()
conn.close()

# 将数据库文件传回远程
try:
ssh.connect(hostname, port, username, password)

sftp = ssh.open_sftp()
sftp.put(local_db_path, remote_db_path) # 将本地修改的数据库传回远程
sftp.close()

print(f"成功将本地 {local_db_path} 上传到远程 {remote_db_path}")

finally:
ssh.close()

# 删除本地的临时文件
os.remove(local_db_path)
```

#### 说明
- 这个例子通过 `SFTP` 复制 SQLite 数据库到本地,在本地执行 `VACUUM`,再将文件传回到远程服务器。
- 使用 `os.remove()` 可以删除本地的临时数据库文件。

通过这种方式,你也可以实现远程 SQLite 数据库的操作。如果数据库较大,建议使用压缩操作前后传输文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/809780.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round)

致敬传奇调题王 HDK A.Meaning Mean给定一个序列 \(a\),每次选择 \(i,j\ (i\neq j)\),使得其缩成一个值为 \(\lfloor\frac{a_i+a_j}{2}\rfloor\) 的数,直至剩余一个数,求最终答案的最大值一开始想的是最小化 \(\lfloor\frac{a_i+a_j}{2}\rfloor\) 的损失,后来发现这点损失…

读数据工程之道:设计和构建健壮的数据系统02数据工程师

数据工程师1. 背景和技能 1.1. 数据工程是一个快速发展的领域,关于如何成为一名数据工程师仍然存在很多问题 1.2. 进入数据工程领域的人在教育、职业和技能方面有着不同的背景1.2.1. 每个进入该领域的人都应该投入大量的时间进行自学1.3. 从一个邻近的领域转到数据工程是最容易…

销售秘籍:故事+观点+结论

在销售的浩瀚宇宙中,隐藏着一个不朽的秘诀——利用人类共有的“错失恐惧”,激发客户内心的渴望与行动。正如村上春树所言,每个故事都深深植根于灵魂,而大仲马则揭示,灵魂之眼所见,比肉眼更为长久铭记。 错失恐惧:销售心理学的隐形推手 作为社会性生物,我们天生害怕错过…

面相快速入门教程5水性

5 水性 在本章中,我将介绍水元素的基本知识,并让你学会如何识别水元素。首先,我们来快速参考一下水元素的特征:能量:黑暗、静止、漂浮、安静、夜晚、冬天、死亡、出生前 特质:睿智、勇敢、恐惧、顽强、果断、任性、独立、坚强、忧郁、固执、神秘、反思、多梦、艺术、神秘…

修改PE入口点方式注入自己编写的DLL——《英雄无敌》1代小回城术修改成大回城术

《英雄无敌》每代都有回城术,而第一代的回城术则是所谓的“小回城术”,就是到达的城堡不能选择。到了《英雄无敌》2代和3代,都有大小回城术了,而大回城术可以使英雄回到己方的任意一座没有自己的英雄所在的城堡,有了这样的魔法,使得英雄能兼顾整个地图,是每个玩家都是首…

Architecture 1001: x86-64 Assembly 汇编

编程语言心法参考:http://www.yinwang.org/blog-cn/2017/07/06/master-pl 英语阅读速成:http://www.yinwang.org/blog-cn/2018/11/23/grammar 前置条件 必须熟悉 C 编程。 https://www.learn-c.org/ https://www.edx.org/certificates/professional-certificate/dartmouth-im…

《机器学习》 学习记录 - 第二章

好多看不懂的高数内容。。。 第2章 模型评估与选择 2.1 经验误差与过拟合错误率(error rate):分类错误的样本数占样本总数的比例。 若在m个样本中有a个样本分类错误,则错误率\(E=a/m\); 而常说的 精度 则等于\(1-a/m\),即 “精度=1-错误率” ,常写为百分比形式。训练误差(…

git push代码失败,鉴权失败

github 无法push 代码 1、确保设置了用户名和邮箱 git config --global user.name "mars" git config --global user.email "mars3603@163.com" 2、修改 .git/config 中的URL,将https的方式修改为 ssh https方式:url = https://github.com/Mars3603/grpc…

织物图像的配准和拼接算法的MATLAB仿真,对比SIFT,SURF以及KAZE

1.算法运行效果图预览 (完整程序运行后无水印)SIFT: surf:kaze: 2.算法运行软件版本 MATLAB2022a3.部分核心程序 (完整版代码包含注释和操作步骤视频)img1 = imread(Images\F1.jpg); img2 = imread(Images\F2.jpg); figure; subplot(121); imshow(img1); title(原始图片1)…

06.OpenFeign接口调用

1.提问 1.1 已经有RestTemplate + LoadBalancer的方式进行服务的调用,为什么还要有OpenFeign? 因为OpenFeign的功能更强大,和使用更便携。 1.2 使用那个? 推荐使用OpenFeign 2.OpenFeign是什么 2.1 官网翻译 https://docs.spring.io/spring-cloud-openfeign/reference/spri…

Hadoop单机模式

1.安装JDK 1.1 下载解压 tar zxf jdk-8u151-linux-x64.tar.gz -C /usr/local/src mv jdk-8u151-linux-x64 java1.2 添加环境变量 export JAVA_HOME=/usr/local/src/java export PATH=$PATH:$JAVA_HOME/binsource /etc/prifile java -version2.安装Hadoop 1.1 下载解压 tar zxf …

mysql读写分离的最佳实践

一. 传统的读写分离方式 在 MySQL 中实现读写分离可以通过以下几种方式来达到目的: 1. 主从复制 使用主从复制(Master-Slave Replication)是实现读写分离的常见方式。主库:处理所有的写入操作(INSERT、UPDATE、DELETE)。 从库:负责处理读操作(SELECT)。步骤:设置主从…