如何将(sql)数据库添加到我的sintra应用程序?

时间:2012-08-23 06:38:32

标签: sql ruby sinatra

当我开始编写我的sinatra应用程序时,我以前从未使用它。请注意,我已经并且仍然没有使用过RoR的经验。我有一个.rb文件和一个.haml,很高兴。现在我不得不将.rb文件拆分成大约10个“库”文件,因为整个应用程序变得越来越复杂。

我将一些应用程序日志/信息存储在csv文件中,现在我在访问csv文件时遇到了冲突。所以我认为我需要引入“适当的”数据库解决方案。我希望它成为我的ruby(sinatra)应用程序的一部分。

如何将'light'sql数据库引入我的sintra应用程序?


我在ruby 1.8.7(2010-08-16 patchlevel 302)[i386-mingw32]很快升级到1.9(希望如此)

4 个答案:

答案 0 :(得分:3)

我建议查看Sequel。它非常灵活和强大,适用于SQLite,MySQL,Postgres,Oracle和其他DBM。关于你如何与数据库交谈并不是自以为是;您可以将其用作ORM或简单数据集,并允许嵌入式SQL或更多编程方法。

答案 1 :(得分:1)

对于ORM,建议使用ActiveRecord和Sequel。关于数据库,我想sqlite3将足以满足您的需求。您也可以选择mysql或pg。

如果你想使用active_record,你会发现这个article非常有用。 如果选择续集,请阅读续集文件here

安装宝石后。您可以开始编写一些代码来连接数据库。然后可能会有一些迁移任务来构建数据库表(并且不要忘记构建一些相应的模型)。两个gem都有类似的迁移语法。之后,导入您的csv数据并做得很好。

答案 2 :(得分:0)

使用Active RecordDataMapper向我的Sinatra个应用添加对象持久性时,我没有遇到任何问题。人们还告诉我Sequel非常好,但哲学上它不是Active Record imho的世界。

Active RecordSequel支持更多以数据库为中心的方法,您可以将表拼写为迁移文件集合中的一组数据库和表定义,将它们合并到一个模式中,然后用于构建或更新数据库表。如果您真的关心底层SQL数据库,那么其中一个适合您。我发现它们是六个,另一个是六个。

DataMapper更多是以对象为中心的,并允许您在对象自己的类定义中定义所需的属性和对象关系;然后当您的应用启动时,请确保调用DataMapper.auto_upgrade!并升级数据库以适合您的对象图。好处是你只有一个地方可以找到你的对象可能具有的属性。缺点是您对底层数据库的细节控制较少,尽管紧密定义映射并非不可能,DataMapper在您关心数据库表上的对象图时效果很好。

好消息是,一旦从对象图到定义的SQL数据库表进行映射,它们几乎都以相同的方式工作。所有这些都支持对相关的对象集合,many_to_many关系,多态等等进行惰性或先发制人加载,并且仅在配置和种子细节方面有所不同。

我经常使用DataMapper启动项目只是为了提高和拆除数据库模式的速度,因为应用程序的对象图仍在不断变化;当架构稳定下来时,我会快速重构Active Record。下一个项目我想我会给Sequel一个回事,因为人们似乎对它赞不绝口。

答案 3 :(得分:0)

我已经成功使用了与Sinatra的datamapper,就像其他帖子一样,你也可以使用Sequel和Active Record。可能使用Active Record的一个优点是,如果您确实想要使用/学习ROR,则Active Record是默认的ORM,因此可能是您想要考虑的内容。

如果您不想使用ORM路由,可以始终使用SQL-Ruby gem,它允许您创建和运行SQL查询。以下是网站http://sqlite-ruby.rubyforge.org/

中的一些示例代码
require 'sqlite'

db = SQLite::Database.new( "data.db" )

db.execute( "select * from table" ) do |row|
  p row
end

db.close