开发,但是Termux

2022年08月24日 705点热度 0人点赞 0条评论

用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.confpg_hba.conf

postgresql.conf打开添加这一句: listen_addresses = '*' 表示监听所有IP,这个按需更改,如果你就需要固定IP那就改成固定的,程序什么都在同意设备不需要其他网络访问那就不用改。

pg_hba.conf这个里面改两个,看图选中这两个就是,改成自己所需的IP。

# 然后把服务启动上
sv-enable postgres

上面你这个前提需要安装termux-services,直接apt 或 pkg安装就可以了。

pycharm 添加数据源测试一下是否可以连接

这样数据库环境就准备好了,接下来准备在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了,有时间看下有没有更好的方法~

文章评论