속편: ActiveRecord의 대안

금요일에 나는 집으로 가져가는 코드 평가를 받았다.나는 Ruby로 RESTful API를 구축할 것을 요구받았지만, 큰 문제는 Rails가 없다는 것이다.그중에서 얻은 계시-
  • 저는 이 기회를 얻게 되어 매우 흥분했습니다. 왜냐하면 이것은 제가 구직하는 두 번째 코드 도전이기 때문입니다.익숙해지면 교묘해진다. 그래서 내가 얻는 것이 많을수록 다음 시간은 자신감과 편안해진다.
  • 도구/프레임워크 구축에 대한 귀중한 경험을 얻었습니다. 제가 이미 알고 있는 모든 존재와/또는 사용하는 도구/프레임워크를 가지고 있을지 모르겠습니다.그 중 하나는 Sequel입니다. 이것이 바로 제가 오늘 쓸 것입니다.
  • 나의 도전에 대해 나는 Active Record, 소년이 아닌 Sequel을 사용하도록 요구받았다. 이것은 도전이다.나의 속편에 대한 견해는 여전히 현안으로 남아 있다.나의 첫 반응은 왜 누군가가 Active Record에서 이 보석을 사용했는지 알고 싶다는 것이다.그것을 사용하는 과정에서 나는 그 중 하나를 정말 좋아했다. 이것은 나의 관점을 좀 부드럽게 만들었다.내가 이 박문을 다 썼을 때, 우리는 곧 알게 될 것이다.

    속편은 무엇입니까?


    Sequel은 "간단하고 유연하며 강력한 SQL 데이터베이스 액세스 키트"를 제공하는 Ruby gem입니다.널리 사용되는 Active Record gem에 필적할 수 있다는 얘기다.Sequel에서는 ActiveRecord처럼 마이그레이션, 쿼리 및 데이터베이스를 실행할 수 있습니다.

    Sequel이 지원하는 데이터베이스 유형


    현재 ADO, Amalgalite, IBM DB, JDBC, MySQL, Mysql2, ODBC, Oracle, PostresQL, SQLAnywhere, SQLite3와 TinyTDS를 지원합니다.

    설치 갱신


    Sequel을 사용하려면 먼저 프로젝트에gem을 설치해야 합니다.이렇게 하려면 GEM 파일로 이동하여 gem ‘sequel’을 추가합니다.터미널에서 $ bundle install을 실행해서gem를 설치해야 합니다.application.rb 파일에서는 ActiveRecord와 같이 require ‘sequel’을 사용해야 합니다.

    데이터베이스 만들기


    나는 Sequel이 독특한 점을 발견했다. (물론, 나는 이 문제를 해결하기 위해 오류를 만났다.) 그것은 바로 Sequel에 연결을 시도하기 전에 데이터베이스를 만들어야 한다는 것이다.
    데이터베이스를 만들려면 다음 명령(사용자 데이터베이스 이름 사용)-$ createdb pets_development을 실행하십시오.
    참고: 이 자습서에서는 PostgresSQL을 사용합니다.SQLite3에 비해 데이터베이스 생성이 독특하기 때문에 이 점을 기억하세요. 만약에 서로 다른 유형의 데이터베이스를 사용한다면 visit this page을 기억하세요.

    마이그레이션 파일 만들기


    마이그레이션 파일을 만드는 것은 레이아웃의 Active Record와 매우 비슷하지만 rake db:create처럼 실행할 수 있는 간단한 명령은 없습니다.마이그레이션 파일을 수동으로 만들었지만, Sequel이 필요로 하기 때문에 파일 이름의 첫머리에 시간 스탬프를 추가해야 합니다.
    # 20190514_dogs.rb
    Sequel.migration do
      change do
        create_table(:dogs) do
          primary_key :id
          String :name, :null => false
          String :breed, :null => false
          foreign_key :owner_id, :people
        end
      end 
    end 
    
    # 20190514_owners.rb
    Sequel.migration do
      change do
        create_table(:owners) do
          primary_key :id
          String :name, :null => false
        end
      end 
    end
    

    데이터베이스에 연결


    이제 데이터베이스를 만들고 파일을 마이그레이션했으며 Sequel을 데이터베이스에 연결해야 합니다.이를 위해서는 application.rb 파일을 탐색하고 다음 코드를 포함해야 합니다.
    # application.rb
    
    # establishes Sequel connection to db
    DB = Sequel.connect(adapter: :postgres, database: pets_development', host: 'localhost')
    
    주의: 데이터베이스에 연결하는 데는 여러 가지 방식이 있는데 이것이 바로 내가 좋아하는 방식이다.이 article에는 추가 옵션이 포함되어 있습니다.
    또 다른 주의사항: 모델을 만든 후 데이터베이스에 연결할 수 없기 때문에 모델을 만들기 전에 이 연결 절차를 완성해야 합니다(제가 어려운 방식으로 이 점을 알았습니다).

    모델 생성하기


    Sequel의 모델 설정은 ActiveRecord와 매우 비슷합니다.
    # dog.rb 
    class Dog < Sequel::Model
      many_to_one :person
    
      def validate
        super
        errors.add(:name, "must be present") if name.empty?
        errors.add(:breed, "must be present") if breed.empty?
      end
    end
    
    # owner.rb 
    class Owner < Sequel::Model
      one_to_many :dogs
    
      def validate
        super
        errors.add(:name, "must be present") if name.empty?
      end
    end
    
    

    마이그레이션 실행


    이제 데이터베이스 설정의 마지막 단계로 들어가서 이전을 실행합시다.불행하게도, 우리의 이전을 실행하는 것은Active Record를 사용하여 $ rake db:migrate을 입력하는 것처럼 쉽지 않다.다행히도, 우리는 여전히 이 임무를 완수하기 위한 명령을 가지고 있다.$ sequel -m db/migrate/ postgres://localhost/pets_development을 실행합니다.
    주의: "db/migrate/"은 마이그레이션 파일의 경로입니다. 자신의 경로로 바꾸십시오.

    데이터베이스에 피드 설정


    나는 이 프로젝트를 위해 피드 파일을 만들었기 때문에 어떻게 설정하는지 설명할 것이다.우리가 해야 할 첫 번째 일은 유용한gem, Sequel-Seed을 설치하는 것이다.GEM 파일로 이동하여 require ‘sequel-seed’을 추가하고 $ bundle install을 실행합니다.
    다음에 피드 파일을 만들어야 합니다.피드 파일은 이름의 첫머리에 시간 스탬프가 필요합니다.
    # 20190514_dogs_seed.rb 
    Sequel.seed do
      def run
        [
          [buddy, labrador, 1],
          [spot, golden retriever, 1],
          [princess, beagle, 2]
        ].each do |name, breed, owner_id|
          Dog.create name: name, breed: breed, owner_id: owner_id
        end
      end
    end 
    
    # 20190514_owners_seed.rb
    Sequel.seed do
      def run
        [
          [angie],
          [bill],
        ].each do |name|
          Dog.create name: name
        end
      end
    end
    
    
    application.rb 파일로 이동하여 다음 코드를 삽입하여 피드 확장자와 데이터베이스 피드를 로드합니다.
    # application.rb
    require sequel/extensions/seed
    
    # loads the extension
    Sequel.extension :seed 
    
    # seeds the database
    Sequel::Seeder.apply(DB, db/seeds/)
    

    묻다


    Sequel의 질의는 ActiveRecord의 질의와 약간 비슷합니다.Dog.all을 사용하면 데이터베이스에 있는 모든 개를 되돌려줍니다..first.last을 사용하여 데이터베이스에 있는 대상의 첫 번째 사례와 마지막 실례를 얻을 수 있다..order은 데이터베이스에서 실례를 정렬할 수 있도록 합니다.데이터베이스에서 주어진 대상 키와 일치하는 모든 실례를 찾을 수 있습니다.자세한 내용은 here을 참조하십시오.

    원본 SQL 쿼리


    Sequel은 데이터베이스에 대한 원시 SQL 조회를 할 수 있는 매우 교묘한 점이 있다.그래서 너는 이렇게 할 수 있다.
    DB['select * from owners'].each do |row|
      p row
    end
    

    마지막 생각


    나는 원시 SQL 기능을 사용하는 것을 매우 좋아한다.나는 SQL 조회를 정말 좋아한다. 나는 항상 이 기회를 이용하여 나의 SQL 기술을 연습한다.속편의 이 방면은 정말로 나의 그것에 대한 견해를 바꾸었다.그것은 Active Record와 다를 것이 없지만, 나는 그래도 Active Record를 사용하는 것을 더 좋아한다.내 이유는 .where() 명령 때문이야.그것들은 생활을 훨씬 수월하게 만들었다.
    하지만, 나는 확실히 Sequel이 Active Record를 대체할 수 있는 좋은 도구라고 생각한다.나는 이 게시물이 이미 너의 호기심을 불러일으켰고, 아마도 네가 속편을 시도하는 흥미를 불러일으켰으면 한다.
    즐거운 코딩!

    출처


    Sequel: The Database Toolkit for Ruby
    Getting Started with Sequel

    좋은 웹페이지 즐겨찾기