蘭雅sRGB 个人笔记 https://262235.xyz
提供编程和电脑应用视频教程,工具和源代码
C, C++, Python Programming, Source Code, Video

旧Hexo博客 | Github | IP定位WebAPI | Docker Hub
编程中文文档 | 网盘分享 | 中文Linux命令

Python使用Sqlite3数据库管理vps数据

vps_sqlte.png

SQLite 是一个C语言库,它可以提供一种轻量级的基于磁盘的数据库,这种数据库不需要独立的服务器进程,也允许需要使用一种非标准的 SQL 查询语言来访问它。一些应用程序可以使用 SQLite 作为内部数据存储。

Python 建立 Sqlite3 数据库和vps数据表,插入数据示例

vps2021.png

源码: make_db.py

import sqlite3
conn = sqlite3.connect('vps2021.db')

c = conn.cursor()

# Create table   建立 vps 数据表
c.execute('''CREATE TABLE vps
             (ip text, port text, password text, ss_port text, info text)''')

# Insert a row of data  插入一行示例数据
c.execute('''INSERT INTO vps VALUES 
            ('188.188.188.188', '22', 'passwd@vps2021', '443', '0号vps示例')''')

# Save (commit) the changes   保存提交数据修改
conn.commit()

# 不应该使用 Python 的字符串操作来创建你的查询语句,因为那样做不安全;它会使你的程序容易受到 SQL 注入攻击
# 推荐使用 DB-API 的参数替换。在 SQL 语句中,使用 ? 占位符来代替值,然后把对应的值组成的元组做为 execute() 方法的第二个参数。
port = ('22',)
c.execute('SELECT * FROM vps WHERE port=?', port)
print(c.fetchone())

# Larger example that inserts many records at a time
# 一次插入很多行数据记录的例子
purchases = [ ('188.188.188.188', '10122', 'passwd@vps2021', '443', '1号NAT小鸡'),
              ('188.188.188.188', '10222', 'passwd@vps2021', '443', '2号NAT小鸡'),
              ('188.188.188.188', '10322', 'passwd@vps2021', '443', '3号NAT小鸡'),
              ('188.188.188.188', '10422', 'passwd@vps2021', '443', '4号NAT小鸡'),
              ('188.188.188.188', '10522', 'passwd@vps2021', '443', '5号NAT小鸡'),
              ('188.188.188.188', '10622', 'passwd@vps2021', '443', '6号NAT小鸡'),
              ('188.188.188.188', '10722', 'passwd@vps2021', '443', '7号NAT小鸡'),
              ('188.188.188.188', '10822', 'passwd@vps2021', '443', '8号NAT小鸡'),
              ('188.188.188.188', '10922', 'passwd@vps2021', '443', '9号NAT小鸡'),
            ]
c.executemany('INSERT INTO vps VALUES (?,?,?,?,?)', purchases)
conn.commit()

# We can also close the connection if we are done with it.
# 如果我们完成了连接,我们也可以关闭连接。
# Just be sure any changes have been committed or they will be lost.
# 只要确定任何修改都已经提交,否则就会丢失。
conn.close()

运行 make_db.py 脚本,输出一行数据,建立数据文件 vps2021.db

python make_db.py
('188.188.188.188', '22', 'passwd@vps2021', '443', '0号vps示例')

使用软件 SQLiteSpy 打开检查数据表和查询示例

spy.png

输入 SELECT 查询指令,搜索数据

select.png

  • 源码 get_vps_db.py
SELECT * FROM vps WHERE port=10822

快捷键 F2 修改数据

f2.png

Python 获取 vps数据

vps.png

  • 源码 get_vps_db.py
import sqlite3
conn = sqlite3.connect('vps2021.db')
c = conn.cursor()

# 要在执行 SELECT 语句后获取数据,你可以把游标作为 iterator,
# 然后调用它的 fetchone() 方法来获取一条匹配的行,
# 也可以调用 fetchall() 来得到包含多个匹配行的列表。
vps = c.execute('SELECT * FROM vps ORDER BY ip')
print(vps.fetchone())

# 下面是一个使用迭代器形式的例子:
cnt=1   
for row in vps:
  print(cnt,'节点: ', row)
  cnt+=1

conn.close()

从vps数据库中构建我们的应用脚本 源码 sskcp.py

sskcp.png

import sqlite3
conn = sqlite3.connect('vps2021.db')
c = conn.cursor()

# sql 获取 vps 数据
sql = 'SELECT * FROM vps ORDER BY ip'
c.execute(sql)
vps = c.fetchall()

# define Color 
Green = '\033[32m'; Red = '\033[31m'; GreenBG = '\033[42;37m'; RedBG = '\033[41;37m'
Yellow = '\033[0;33m'; SkyBlue = '\033[0;36m'; Font = '\033[0m'
print(GreenBG, ":: SQLite3 数据库 vps2021.db 中获取的节点表  ")

# 显示 vps 数据
cnt=0  ; sk = list()
for row in vps:
  print(SkyBlue, cnt,'节点:', Yellow, row)
  sk.append(list(row))
  cnt+=1

# 输入数字选择节点
print(RedBG, ":: 请选择你需要的节点,输入节点号:", Font, end='')
id = int(input())

def make_sskcp(sk, id):
  text = '''
# git.io/sskcp.sh
  ''' 
  cfg = sk[id]
  str = '#!/bin/bash\n\n'
  str += 'SERVER_IP=' + cfg[0] + '\nPORT=' + cfg[1] + '\nPASSWORD=' + cfg[2] + '\nSS_PORT=40000\nSOCKS5_PORT=1080\n'
  print(str)
  str += text
  return str

# 构建 sskcp.sh 
str = make_sskcp(sk, id)
f = open('sskcp.sh', 'w')
f.write(str)

# 关闭数据库链接和文件
conn.close()
f.close()
本原创文章自由转载,转载请注明本博来源及网址 | 当前页面:蘭雅sRGB 个人笔记 » Python使用Sqlite3数据库管理vps数据