2016-10-03 3 views
3

Ruby를 데이터베이스에 연결하는 기본 사항을 배우려는 자습서를 따르고 있습니다. 현재, 나는 twilio를 사용하여 SMS를 받고, 당신이 말한 것을 바탕으로 메시지를 되돌려 보내는 프로그램을 가지고 있습니다. SQLite3을 사용하여 전화 번호 및 메시지의 다른 많은 부분을 데이터베이스에 저장하려고하지만 코드를 실행할 때마다 데이터베이스에 항목이 없습니다. 여기있어. SQLite3 (Ruby)를 사용하는 데이터베이스가 삽입되지 않습니다.

require 'twilio-ruby' 
require 'google_places' 
require 'sinatra' 
require 'dotenv' 
require 'sqlite3' 

begin 
    db = SQLite3::Database.open "test.db" 
    db.execute "CREATE TABLE IF NOT EXISTS Entries(Id INTEGER PRIMARY KEY AUTOINCREMENT, Searched TEXT, Place TEXT, Number BLOB)" 
    begin 
db.execute "CREATE TABLE IF NOT EXISTS Entries(Id INTEGER PRIMARY KEY AUTOINCREMENT, Searched TEXT, Place TEXT, Number BLOB)" 
db.execute("INSERT INTO Entries (Searched, Place, Number) VALUES(?,?,?)", @incoming, @best_place_fmt, @phonenumber) 
rescue SQLite3::Exception => e 
    puts "Exception occurred" 
    puts e 
#ensure 
# stm.close if stm 
# db.close if db 
end 

twilio 모든 기능

작동하고 메시지가 수신되고 메시지가 전송되지만 데이터베이스 명령 중 어느 것도 실제로 파일을 편집하지 않습니다. 도와 주셔서 감사합니다!

+3

안녕, 그리고 SO에 오신 것을 환영합니다 - 그것은 twilio 물건이 당신이 직면하고있는 문제에 본질적으로 무관 것 같아, 맞아 것입니까? 그렇다면 코드의 DB 비트로 답을 트리밍하여 응답자가 더 쉽게 사용할 수 있습니다 (따라서 유용한 응답을 얻을 가능성이 높아집니다). – Jeff

+0

언제 SQLite 코드가 실행될 것으로 기대합니까? 현재 디렉터리가있을 때 예상되는 내용은 무엇입니까? 'test.db' 파일이 생성 되었습니까? 'test.db'에 대한 사용 권한은 무엇입니까? –

+0

SQLite CLI에 붙여 넣으면 SQL이 작동합니까? https : //www.sqlite.org/cli.html – Kris

답변

1

DB 관련 코드를 실행할 때 오류가없고 데이터베이스가 가득 찼습니다.

이 코드에 같은 select을 추가하는 경우 :

require 'sqlite3' 

begin 
    db = SQLite3::Database.open "test.db" 
    db.execute "CREATE TABLE IF NOT EXISTS Entries(Id INTEGER PRIMARY KEY AUTOINCREMENT, Searched TEXT, Place TEXT, Number BLOB)" 
    db.execute "INSERT INTO Entries(Searched) VALUES ('Is')" 
    db.execute "INSERT INTO Entries(Place) VALUES ('This')" 
    db.execute "INSERT INTO Entries(Number) VALUES ('Working')" 
    (db.execute "Select * from Entries").each{|dataset| 
     p dataset 
    } 
rescue SQLite3::Exception => e 
    puts "Exception occurred" 
    puts e 
#ensure 
# stm.close if stm 
# db.close if db 
end 

는 내가 얻을 :
[1, "Is", nil, nil] 
[2, nil, "This", nil] 
[3, nil, nil, "Working"] 

어떻게 볼 않았다

의 DB 엔트리가없는 것을?

오른쪽을 확인 하시겠습니까? test.db? p Dir.pwd으로 실제 디렉토리를 확인할 수 있습니다.

나는 당신의 삽입-명령 작업을하는 경우, 변수에 값이

require 'sqlite3' 
File.delete('test.db') #Delete previous result and start with initial example. 
@incoming = 'in' 
@best_place_fmt = 'fm' 
@phonenumber = 123456789 
begin 
    db = SQLite3::Database.open "test.db" 
    db.execute "CREATE TABLE IF NOT EXISTS Entries(Id INTEGER PRIMARY KEY AUTOINCREMENT, Searched TEXT, Place TEXT, Number BLOB)" 
    db.execute("INSERT INTO Entries (Searched, Place, Number) VALUES(?,?,?)", @incoming, @best_place_fmt, @phonenumber) 
    (db.execute "Select * from Entries").each{|dataset| 
     p dataset 
    } 
rescue SQLite3::Exception => e 
    puts "Exception occurred" 
    puts e 
#ensure 
# stm.close if stm 
# db.close if db 

내 결과 :


예 문제의 수정 후 :

[1, "in", "fm", 123456789] 

나는 ORM의 사용법에 대해 질문이 있으면 물어 보았다. 그냥 당신에게 속편과 함께 예를 들어 아래의 인상을주는 :

@incoming = 'in' 
@best_place_fmt = 'fm' 
@phonenumber = 123456789 

require 'sequel' 
db = Sequel.sqlite("test.db") #Here you could use also another DB 
db.tables.each{|table| db.drop_table(table)} 
db.create_table :entries2 do 
    primary_key :id 
    field :searched, :type => :text 
    field :place, :type => :text 
    field :number, :type => :blob 
end 
db[:entries2].insert(nil,@incoming, @best_place_fmt, @phonenumber) 
puts db[:entries2].all #{:id=>1, :searched=>"in", :place=>"fm", :number=>"123456789"} 
+0

예, sqlite3 CLI를 사용할 때 데이터베이스를 열지 못했습니다. 내 코드를 지금 업데이트하고 테이블을 생성했지만 변수가 데이터베이스에 저장되지 않습니다. 변수를 데이터베이스 엔트리에 넣을 수있는 특별한 방법이 있습니까? –

관련 문제