Mojolicious数据库操作(一)
昨日,我讲完了Mojolicious::Lite。按理来说,开发一个简单的Web服务是没问题了。但是,作为一个网站,没有数据库的支持是不完整的。所以,我们先拿出时间来讲数据库。
Mojolicious之所以强大,之所以我很喜欢,最大的因素在于它模块的全面性。尤其的是在数据库方面,Mojo为我们封装好了数据库的操作方法,十分简洁、友好。
数据库方面,Mojo最常用的有mysql的Mojo::mysql模块,SQLite的Mojo::SQLite,PostgreSQL的Mojo::Pg。这三个模块接口是相同的,掌握一种其他两个很容易就会掌握。
而我选择使用开源领域最出名的MySQL作为本篇的数据库进行展开说明。
一、引用
Perl语言导入模块的方法引入Mojo::mysql:
use Mojo::mysql;
二、连接数据库
Mojo::mysql模块实际上继承自DBI,是DBI的一种异步封装。在连接数据库这一步上,会有DBI的影子:
# 连接一个本地数据库 my $mysql = Mojo::mysql->strict_mode('mysql://username@/test'); # 连接一个远程服务器上的数据库 my $mysql = Mojo::mysql->strict_mode('mysql://username:password@hostname/test'); # MySQL >= 8.0: my $mysql = Mojo::mysql->strict_mode('mysql://username:password@hostname/test;mysql_ssl=1'); # 使用 DBD::MariaDB 替代 DBD::mysql my $mysql = Mojo::mysql->strict_mode('mariadb://username@/test');
连接语句strict_mode括号部分的字符串,有一个专业名词叫dsn。当然DBI的dsn要比mojo数据库中的dsn复杂、难懂一些。
mojo数据库模块中的dsn很容易懂——mysql://用户名:密码@主机/数据库名。
连接后,我们便得到一个mysql对象——$mysql。
三、创建表格
Mojo::mysql并不像python的sqlalchemy,属于ORM型的封装,即将对象与数据表映射在一起。ORM对于不熟悉数据的初学者来说,的确很友好。但是对于代码的后期维护、改进,尤其是频繁的业务变更来说,显得麻烦了许多。
Mojo::mysql与java的mybatis类似,即将SQL语句暴露在代码中,方便我们改进、变更我们数据库查询代码。也正因如此,需要我们熟悉SQL查询语句。
# 创建一个数据表table $mysql->db->query('create table names (id integer auto_increment primary key, name text)');