[3]ruby&ruby on rails入门笔记---用Ruby访问postgresql

原创 2016年11月16日 18:51:47
在Ruby中,访问数据库可以通过DBI(database API)来访问。Ruby DBI模块为ruby程序访问数据库提供了一个与数据库无关的接口,就像perl的DBI模块一样。其具体的结构如下图,



1.The database interface (DBI): 数据库的接口层,类似于JDBC
2.The database driver (DBD) layer:实际的数据库的驱动,类似于java中实际的MySQL,Oracle的
JDBC的具体实现包。

下面以postgresql数据库为例子
1. 下载dbd-pg

2. 下载dbi

3. 代码
require'pg'
require'SecureRandom'
classPg_DB_Test
attr_reader:conn
defcreateDBConnection
if!@conn
@conn=PGconn.connect(@dbhost,5432,'','',@dbname,@dbuser,@dbpassword)
end
end
definitialize(dbhost,dbname,dbuser,dbpassword,tableName)
@dbhost=dbhost
@dbname=dbname
@dbuser=dbuser
@dbpassword=dbpassword
@tableName=tableName
@conn= createDBConnection
end
defqueryTablesEmployeeExist?
res=@conn.exec('select tablename, tableowner from pg_tables')
res.eachdo|row|
#puts row['tablename'] + ' | '+ row['tableowner']
ifrow['tablename'].match(/employee/)
return true
else
next
end
end
return false
end

defcreateTable
begin
@conn.exec("DROP TABLE IF EXISTS EMPLOYEE")
@conn.exec("CREATE TABLE EMPLOYEE (ID serial primary key,FIRST_NAME CHAR(20) NOT NULL,LAST_NAME VARCHAR,AGE INT,SEX CHAR(1),INCOME FLOAT )")
rescueDBI::DatabaseError=>e
puts"An error occurred"
puts"Error code:#{e.err}"
puts"Error message:#{e.errstr}"
end
end
definsertEmployee
if!self.queryTablesEmployeeExist?
puts"----------Created new table:employee-------"
createTable
else
puts"-----The employee table already existed!!!-----"
end
sqlStatement="INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME)VALUES ('Mac','"+SecureRandom.uuid +"', 20, 'M', 2000)"
putssqlStatement
@conn.exec(sqlStatement)
puts"Record has been created"
PG::Connection
puts@conn.class
end
defupdateEmployee
@conn.prepare'stm1',"UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = $1"
@conn.exec_prepared'stm1',['M']
end

defcloseDBConnection
@conn.closeif@conn#rescue nil
end
end
puts
dbhost="127.0.0.1"
dbname="test"
dbuser="postgres"
dbpassword="password"
tableName="student"
pgdb=Pg_DB_Test.new(dbhost,dbname,dbuser,dbpassword,tableName)
pgdb.insertEmployee
pgdb.updateEmployee
pgdb.closeDBConnection
#1 执行完后,控制台输出如下
C:\RailsInstaller\Ruby2.2.0\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) D:/ruby/learnruby/pg_db_test.rb
Testing started at 6:44 PM ...
NOTICE:  table "employee" does not exist, skipping
----------Created new table:employee-------
INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME)VALUES ('Mac','d8886789-fcbc-407b-b2bc-8e65fcdcb1d8', 20, 'M', 2000)
Record has been created
PG::Connection
Process finished with exit code 0


#2 执行完后,其数据库表的数据如下,


版权声明:本文为博主原创文章,未经博主允许不得转载。

使用postgresql来作为rails的数据库

rails默认自带了个零配置的sqlite、这个做为开发还OK、不过不能并发写入的特性不适合作为生产使用、从头开始说吧   P.S.:以下基于ubuntu server部署postgres...
  • emerald0106
  • emerald0106
  • 2012年06月28日 13:45
  • 1205

Ruby on Rails教程 和Ruby&Rails 入门大全,对新手很有用

我自己常用的gem包: 数据库驱动 mysql , sqlite3-ruby, postgre-pr,名字不言而喻。 很遗憾并不是所有的Ruby库都是通过gem方式安装,比如针对Oracle的ruby...
  • Bactryki28
  • Bactryki28
  • 2016年06月14日 12:00
  • 1518

ruby on rails入门系列--一个简单的HelloWorld程序

 安装了ruby和ruals后,我们就可以在命令窗口通过rails这个命令行工具来创建ruals应用程序,使用rails工具可以很多事情变得简单。 在E盘的根目录下创建一个RubyProject...
  • oec2003
  • oec2003
  • 2008年04月13日 09:31
  • 3844

ruby on rails新建项目,heroku 部署项目

本地新建项目cd # 进入家目录 mkdir workspace # 新建 workspace 目录 cd workspace/ # 进入 wor...
  • tse_e
  • tse_e
  • 2017年01月19日 18:39
  • 231

十大必读Ruby on Rails图书

【图灵图书推荐】Ruby for Rails中文版——Rails之父强力推荐的Ruby教程Antonio Cangiano,一位IBM 多伦多研究中心的软件工程师,Ruby, Haskell, Pyt...
  • turingbook
  • turingbook
  • 2007年07月29日 02:34
  • 9609

mac下ruby on rails环境搭建

ruby初探
  • nemoalways
  • nemoalways
  • 2016年08月03日 17:31
  • 457

rails 通过局域网ip连接访问本地Rails项目

新建的rails4.2.6项目,项目不能通过内网ip:3000访问,只能localhost:3000访问由于Rails4.2之前都是默认绑定到 0.0.0.0,Rails 4.2 就默认绑定 loca...
  • yc1022
  • yc1022
  • 2016年03月31日 17:35
  • 1499

ruby on rails 入门系列--rails目录结构简述

app     应用程序的大部分代码都将位于app目录中。在app目录下有四个子目录,分别是controllers,helpers,models,views ,rails是典型的mvc架构,代码分别对...
  • oec2003
  • oec2003
  • 2008年05月12日 08:10
  • 1400

Ruby——在Rails上使用Bootstrap

首先, Download Bootstrap Copy: bootstrap/dist/css/bootstrap.css and bootstrap/dist/css/boo...
  • firefist_wei
  • firefist_wei
  • 2015年01月23日 12:18
  • 1054

ruby常量介绍

了解过Ruby的都知道,任何以大写字母开头的引用,当然也包括类名和Module名,都是常量,我们之前说过,ruby里任何对象,包括类、常量和Module都是对象,都有object_id,这里我们不介绍...
  • feigeswjtu
  • feigeswjtu
  • 2016年04月18日 00:24
  • 979
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[3]ruby&ruby on rails入门笔记---用Ruby访问postgresql
举报原因:
原因补充:

(最多只允许输入30个字)