开发,但是Termux
用Termux这个环境已经有段时间了,最近准备写一些网站监控项目: 网站是否在线、是否有变化等等。分享一下Termux一些环境的进阶使用方法。
Postgresql
数据路选择Postgresql,不选择mysql的原因就是。Postgresql支持json格式直接保存,查询等操作,也就是说具备NoSQL的特性,使用起来比较方便。
使用安装就是根据Termux给出的官方文档进行操作的:https://wiki.termux.com/wiki/Postgresql。按照文档创建好数据库之后,更改一下连接规则,因为只在内网使用,所以监听直接更改为全网段。
~ $ psql default
psql (14.2)
Type "help" for help.
default=# show config_file;
config_file
--------------------------------------------------------------------
/data/data/com.termux/files/usr/var/lib/postgresql/postgresql.conf
这里面psql default,default是创建的数据库名称,然后输入show config_file查看配置文件的路径。更改捅位置下两个配置文件postgresql.conf、pg_hba.conf。
postgresql.conf打开添加这一句: listen_addresses = '*' 表示监听所有IP,这个按需更改,如果你就需要固定IP那就改成固定的,程序什么都在同意设备不需要其他网络访问那就不用改。
pg_hba.conf这个里面改两个,看图选中这两个就是,改成自己所需的IP。
# 然后把服务启动上
sv-enable postgres
上面你这个前提需要安装termux-services,直接apt 或 pkg安装就可以了。
这样数据库环境就准备好了,接下来准备在python环境中进行测试。
Python
前段时间彻底虚拟环境彻底切换成Poetry,还在慢慢熟悉,这次就在Termux上试试看下是否可用。
curl -sSL https://install.python-poetry.org | python3 -
切换了个新手机测试,开发环境没有装全,所以这一步会出现问题,提示下面内容:
error: can't find Rust compiler ...... This package requires Rust >=1.41.0.
找关键字就行,安装cryptography的时候缺少rust编译环境,咱给他装上就行了。
apt install rust build-essential binutils cmake
这个位置只需要安装rust就可以继续了,但是为了后续安装其他需要编译的包,把编译环境也都准备好。
然后就继续安装了,有可能这一步安装很慢,因为安装脚本中使用默认pypi源进行安装,这里也不建议手动改成其他的镜像源,防止因为同步延迟问题导致后续一些问题(虽然没遇到,只是猜测的)。
安装成功后会提示设置环境变量,要不输入poetry是会找不到命令的。
echo 'export PATH="/data/data/com.termux/files/home/.local/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
之后就可以正常使用了。
接着就是新建个项目目录,poetry init 初始化一下, 在安装psycopg包,写个类测试。
class SQL:
def __init__(self, database, host="localhost", user="root", password="root", port="5432"):
self.conn = psycopg.connect(f"dbname={database} user={user} host={host} password={password} port={port}",
autocommit=True)
self.cur = self.conn.cursor()
def execute(self, sql, args: [tuple, None] = None, no_fetch=False):
"""
执行sql语句
:param sql: sql语句
:param args: 参数
:param no_fetch: 是否不返回结果集
:return:
"""
with self.conn.transaction():
self.cur.execute(sql, args)
if not no_fetch:
return self.cur.fetchall()
def check_table(self, table_name):
return self.execute("SELECT tablename FROM pg_tables WHERE tablename = %s; ", [table_name, ])
def __del__(self):
try:
self.conn.close()
except Exception as e:
logger.error(e)
测试了下执行正常,这个数据库只要是作为日志记录,后续查询方便。手机端执行任务,然后执行结果、执行时间等信息记录到数据库里。常用的电脑中写个中控,就可以实时查看这些记录啦。当然这个中控还没有考虑开始搞,感觉都可以集成到Home Assistant中。
说实话这个psycopg库是真不太会用,中文文档几乎没有,因为是psycopg3版本,比较新采用了上下文管理器协议,官方文档是推荐从连接开始就用with。这在实际项目调用中比较麻烦,除非是进行数据迁移这类不太需要交互的,总不能执行一条语句就重新连接数据库吧。但如果不用又回到2.x版本的时候需要自己处理commit 和 rollback了,有时间看下有没有更好的方法~
文章评论