ORM简介

1. ORM是什么 面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。很早就有人提出,关系也可以用对象表达,这样的话,就能使用面向对象编程,来操作关系型数据库。 简单的说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。 ORM把数据库映射为对象 数据库的表(table) –> 类(class) 记录(record,行数据)–> 对象(object) 字段(field)–> 对象的属性(attribute) 举例来说,下面是一行SQL语句 SELECT id, first_name, last_name, phone, birth_date, sex FROM persons WHERE id = 10 程序直接运行SQL,操作数据库的写法如下: res = db.execSql(sql) name = res[0]["FIRST_NAME"] 改成ORM的写法如下: p = Person.get(10) name = p.first_name 一比较就可以发现,ORM 使用对象,封装了数据库操作,因此可以不碰 SQL 语言。开发者只使用面向对象编程,与数据对象直接交互,不用关心底层数据库。 总结起来,ORM有如下优点: 数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。 ORM 有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。 它迫使你使用 MVC 架构,ORM 就是天然的 Model,最终使代码更清晰。 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解。 你不必编写性能不佳的 SQL。 但是ORM也有很突出的缺点: ORM 库不是轻量级工具,需要花很多精力学习和设置。 对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。 ORM 抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。 2....

April 6, 2021 · 2 min · 李昌

Ubuntu18(WSL2)安装redis

1. 安装并对redis进行配置 更新源并安装redis sudo apt-get update sudo apt-get install redis-server 将redis设置为systemctl sudo vim /etc/redis/redis.conf 找到supervised选项,设置为systemd # If you run Redis from upstart or systemd, Redis can interact with your # supervision tree. Options: # supervised no - no supervision interaction # supervised upstart - signal upstart by putting Redis into SIGSTOP mode # supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET # supervised auto - detect upstart or systemd method based on # UPSTART_JOB or NOTIFY_SOCKET environment variables # Note: these supervision methods only signal "process is ready....

April 4, 2021 · 2 min · 李昌

MySql安装和配置

1. 安装mysql sudo apt update sudo apt install mysql-server 2. 配置mysql 运行 security script sudo mysql_secure_installation 根据提示进行一些必要的配置 进入mysql sudo mysql 接下来,通过以下命令检查每个 MySQL 用户帐户使用的认证方法: SELECT user,authentication_string,plugin,host FROM mysql.user; 在输出中 +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *E6CD266C880D217453293A0247D0142C9CF52730 | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 可以看出,root用户使用插件进行身份验证(进入时不需要输入密码)。如果想要root用户使用密码登陆,可使用如下命令进行配置:...

February 25, 2021 · 2 min · 李昌

Mysql无法远程访问

Mysql无法远程访问 在使用navicat远程连接阿里云的时候,出现“2003 can t connect to mysql server on 10061”错误 经过艰难的谷歌百度stackflow后,发现是3306端口没有监听外部连接,只接收内部ip访问。 解决方案 首先保证阿里云服务器3306端口开放 使用netstat -ntpl |grep 3306命令查看3306端口状态 tcp 0 0 127.0.0.1:22 0.0.0.0:* LISTEN - 可看出只接收内部访问 打开/etc/mysql/mysql.conf.d/mysqld.cnf(网上大部分说是:/etc/mysql/my.cnf) 将bind-address = 127.0.0.1改成bind-address = 0.0.0.0 再次使用netstat -ntpl |grep 3306命令查看 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - 此时3306端口开始监听所有网络访问 **如果是ipv6主机,则改为 bind-address = :: ,表示监听所有网络** 主机’xxx.xx.xxx.xxx’不允许连接到此MySQL服务器 在进行连接ipv6主机的时候出现了如下问题:django.db.utils.InternalError: (1130, “Host ‘2409:8930:1450:316:6179:c54:5901:2f2b’ is not allowed to connect to this MySQL server”) 解决方法如下: mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass'; mysql> GRANT ALL PRIVILEGES ON *....

February 25, 2021 · 1 min · 李昌