小编Kru*_*rut的帖子

如何使用原始sql与ecto回购

我有一个upsert要求,所以我需要调用postgres存储过程或使用公用表表达式.我还使用pgcrypto exgtension进行密码,并希望使用postgres函数(例如"crypt"来编码/解码密码).

但是我无法找到一种方法让Ecto部分或全部使用原始sql,它是否意味着ecto只支持elixir dsl并且当dsl不够时不允许shell-out到原始sql?

我发现我可以通过适配器查询(Rocket是应用程序的名称)

q = Ecto.Adapters.Postgres.query(Rocket.Repo,"select * from users limit 1",[])
Run Code Online (Sandbox Code Playgroud)

但不确定如何将其转化为模型.我是elixir的新手,似乎我应该可以使用Ecto.Model.Schem.schema/3但是失败了

Rocket.User.__schema__(:load,q.rows |> List.first,0)
** (FunctionClauseError) no function clause matching in Rocket.User.__schema__/3    
Run Code Online (Sandbox Code Playgroud)

elixir ecto

42
推荐指数
6
解决办法
2万
查看次数

如何在elixir中记录map/struct

如何在ELixir中记录地图/结构类型而不必实现protocol String.Chars

require Logger
Logger.debug  %{my: "map"}
** (Protocol.UndefinedError) protocol String.Chars not implemented for %{my: "map"}
    (elixir) lib/string/chars.ex:3: String.Chars.impl_for!/1
    (elixir) lib/string/chars.ex:17: String.Chars.to_string/1
Run Code Online (Sandbox Code Playgroud)

elixir

14
推荐指数
2
解决办法
3985
查看次数

在postgresql中从v1 uuid转换或提取timestamptz

我正试图从V1 uuid中提取时间戳,天真地希望这有效:

select '3efe0a20-f1b3-11e3-bb44-14109fec739e'::uuid::timestamp;
Run Code Online (Sandbox Code Playgroud)

这是一个快速示例,展示如何提取时间,但我希望postgresql内置一些内容而不是创建一次性pl/pgSql函数.http://play.golang.org/p/XRCooLgfaG

postgresql uuid

9
推荐指数
1
解决办法
982
查看次数

如何从嵌入结构的方法反映包含结构的字段?

该程序的输出是map[],但我想要map[Id:true name:true]

我正在尝试干燥一些 SQL CRUD 代码,并认为嵌入一个处理数据库读写的持久性结构会很好。在下面的示例中,持久性结构将是内部,我的模型将是外部。谢谢!

http://play.golang.org/p/fsPqJ-6aLI
package main

import (
    "fmt"
    "reflect"
)

type Inner struct {
}

type Outer struct {
    Inner
    Id   int
    name string
}

func (i *Inner) Fields() map[string]bool {
    typ := reflect.TypeOf(*i)
    attrs := make(map[string]bool)

    if typ.Kind() != reflect.Struct {
        fmt.Printf("%v type can't have attributes inspected\n", typ.Kind())
        return attrs
    }

    // loop through the struct's fields and set the map
    for i := 0; i < typ.NumField(); i++ {
        p := …
Run Code Online (Sandbox Code Playgroud)

go

6
推荐指数
1
解决办法
4114
查看次数

在psql中使用位置参数($ 1,..)

我经常想从我的程序代码中复制/粘贴sql并在psql中测试/调试,并且必须用文字值替换位置参数是很繁琐的.有一个很好的转换方式:

select * from users where name=$1 and email=$2; 
Run Code Online (Sandbox Code Playgroud)

至:

select * from users where name='troy' and email='t@me.com';
Run Code Online (Sandbox Code Playgroud)

postgresql variables string-interpolation psql

6
推荐指数
1
解决办法
3483
查看次数

如何使用Loaded关联序列化/反序列化Ecto模型?

我几乎在每个请求上都从数据库中获取用户(带有配置文件关联等).我想缓存在服务器上并保存数据库一些额外的工作.最初考虑Redis或Memcached,最终由Mnesia支持分布式缓存.

我知道如何进行传输(在Redis/Memcache的情况下将二进制文件传输到缓存后端)但是如何将模型序列化和反序列化为二进制文件?

elixir ecto

6
推荐指数
1
解决办法
1499
查看次数

如何使用带有Rack :: Builder :: map的lotus路由器

有没有办法将地图和(莲花)路由器命名空间一起使用?下面是config.ru我试图作为演示运行的示例.

require 'bundler'
Bundler.require

module Demo

  class Application

    def initialize
      @app = Rack::Builder.new do
        map '/this_works' do
          run  Proc.new {|env| [200, {"Content-Type" => "text/html"}, ["this_works"]]}
        end
        map '/api' do
          run Lotus::Router.new do
            get '/api/', to: ->(env) { [200, {}, ['Welcome to Lotus::Router!']] }
            get '/*', to: ->(env) { [200, {}, ["This is catch all: #{ env['router.params'].inspect }!"]] }
          end
        end
      end
    end

    def call(env)
      @app.call(env)
    end
  end  
end

run Demo::Application.new
Run Code Online (Sandbox Code Playgroud)

ruby hanami hanami-router

5
推荐指数
1
解决办法
618
查看次数

Phoenix 应用程序中的工作进程队列

我需要像 PubSub 这样的东西,但不是向所有订阅者广播,而是只将消息发送给 1 个订阅者(最好根据接收缓冲区中的消息数量自动选择订阅者,越低越好)。

我正在尝试使用受控数量的分布式工作人员发送数十万个 http 请求。

elixir phoenix-framework

5
推荐指数
1
解决办法
2551
查看次数

如何键入cast decode JSON,就好像它来自数据库一样

从数据库加载日期/时间类型时,Ecto将转换为Ecto.DateTime类型.从JSON字符串加载模型时,如何应用相同类型的转换

defmodule Rocket.User do
  use Rocket.Model

  schema "users" do
    field :created_at, :datetime
    field :name, :string
    field :email, :string
    field :password, :string
    field :timezone, :string
  end
end

iex(40)> Poison.decode!(~s({"created_at":"2015-01-21T06:05:10.891Z"}), as: Rocket.User)  
%Rocket.User{created_at: "2015-01-21T06:05:10.891Z", email: nil, id: nil,
 name: nil, password: nil, timezone: nil}
Run Code Online (Sandbox Code Playgroud)

elixir ecto

5
推荐指数
1
解决办法
1436
查看次数

Postgresql 日期小于等于

对我来说,这看起来像是一个 postgresql (v9.4) 错误,或者这是预期的行为?-- 带有created_at的广告2015-02-06在表中,但不会出现在使用<=运算符的第二个查询中

addb=# select max(created_at)::date from ads;
    max     
------------
 2015-02-06
(1 row)

addb=# SELECT created_at::date, 
       count(*) as num_ads, 
       'created'::text as "activity" 
       FROM ads where created_at>='2015-02-04'::date and 
       created_at<='2015-02-06'::date group by created_at::date;
 created_at | num_ads | activity 
------------+---------+----------
 2015-02-04 |    1153 | created
 2015-02-05 |    1230 | created
(2 rows)
Run Code Online (Sandbox Code Playgroud)

postgresql

5
推荐指数
0
解决办法
7376
查看次数