:11:28.960 [debug] QUERY OK db=3.4ms
DELETE FROM "users" WHERE "id" = $1 [3]
{:ok,
%EctoSample.User{__meta__: #Ecto.Schema.Metadata<:deleted, "users">, age: nil,
id: 3, inserted_at: nil, name: nil, password: nil, updated_at: nil}}
补充说明
除了修改上面的文件之外,还有下面2个地方需要修改,否则 EctoSample 模块不会加载:
# vi lib/ecto_sample.ex
defmodule EctoSample do
use Application
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
worker(EctoSample.Repo, []),
]
opts = [strategy: :one_for_one, name: EctoTest.Supervisor]
Supervisor.start_link(children, opts)
end
end
def application do
[applications: [:logger, :postgrex, :ecto],
mod: {EctoSample, []}] # <=== IMPORTANT !!!
end
api with postgresql
postgresql 安装与配置
以下安装配置是基于 CentOS7 的
# 安装 package
$ sudo yum install postgresql-server
# init db
$ sudo su - postgres
$ initdb -D /var/lib/pgsql/data
# start db
$ sudo systemctl start postgresql
# create user and database
$ sudo su - postgres
$ psql -U postgres -W # password is also "postgres"
postgres=# CREATE USER iotalab WITH PASSWORD 'iotalab';
postgres=# CREATE DATABASE test OWNER iotalab ENCODING 'UTF8';
设置可以局域网内访问
$ sudo su - postgres
$ cd /var/lib/pgsql/data
vim pg_hba.conf
host all all 0.0.0.0/0 md5
vim postgresql.conf
listen_addresses = '*'
远程连接不上时试试禁用 iptables
$ sudo systemctl stop iptables
创建 数据库和表
给这个工程加上 数据库的支持 其实创建的工程的时候,默认就是支持数据库的。但是前面的示例不需要数据库,所以创建这个工程的时候用了 –no-ecto 的参数。 重新创建工程,并将已写的代码复制进去即可,这次创建工程时不加 –no-ecto 参数。
$ mix phoenix.new phoenix_api
配置数据库连接并创建数据库 修改文件 config/dev.exs
# Configure your database
config :phoenix_api, PhoenixApi.Repo,
adapter: Ecto.Adapters.Postgres,
username: "iotalab",
password: "iotalab",
database: "dev_db",
hostname: "localhost",
pool_size: 10
创建数据库
创建一张用来测试的表
$ mix phoenix.gen.model User users name:string email:string age:integer
* creating web/models/user.ex
* creating test/models/user_test.exs
* creating priv/repo/migrations/20160913230129_create_user.exs
查看生成的文件,已经根据命令行的中参数,生成了对应的对象,可以发现其中自动添加了 timestamps 方法,这个方法是自动添加一些 updated_at, inserted_at 等通用时间字段。 然后通过命令行创建表:
$ mix ecto.migrate
07:10:52.527 [info] == Running PhoenixApi.Repo.Migrations.CreateUser.change/0 forward
07:10:52.527 [info] create table users
07:10:52.537 [info] == Migrated in 0.0s
增删改查 示例
在测试代码中构造了 增删改查 的测试 case,然后用 mix test 命令来进行测试。 具体代码可以参考:http://git.oschina.net/wangyubin/phoenix-api/blob/master/test/models/user_test.exs
总结
利用 ecto 模块,操作数据库非常简单,但是,写岀优秀 api 的关键还是在于 api 的设计上,学习这个框架的意义是在于把一些通用繁琐的工作交给框架来处理,可以让我们把主要的精力放在业务代码的构建上。
至此,phoenix framework api 系列的3篇也结束了。
来源:http://blog.iotalabs.io/
|