Rails 连接另一个系统的数据库,查询数据,用 Rails 在前端搭建一个查询报表的 web 应用

lanqiu1986 · 2017年08月02日 · 最后由 lanqiu1986 回复于 2017年08月08日 · 2144 次阅读

已经在 database.yml 中,连接上了提供基础数据的系统数据库,但在哪,写查询语句啊(语句一般都很长,涉及很多表,网上查了一些文章,不能直接用原系统数据库的表名,要在 rails 程序中起个新名字对应过来,但有很多表,都要对应过来,每个表建立一个 model 么), 本人刚学 rails,求各位同学指点一下方向,或者查看哪些相关文章?十分感谢~

在已有的数据库上套 rails 是个很痛苦的事情

如果是使用 Python/Django 的话,可以在设置好数据库配置之后使用 inspectdb 命令直接生成目标数据库中所有的表的 model,再将生成的 model 做些修葺即可。

$ python manage.py inspectdb > models.py

官方文档: Integrating Django with a legacy database https://docs.djangoproject.com/en/1.11/howto/legacy-databases/

我一直就是这么做的。

  1. 数据库层面建视图,然后根据视图建 model

  2. 或者直接 sql 查询

inzaghi 回复

谢谢! 问一下,我是这样写的 sql,但查询速度很慢,有什么原因么 def index @his = Hi.connection.select_value(sql) end

lanqiu1986 回复

你直接连接 sql 使用视图速度就快了!!

是 SQL 本身执行慢,把这条 SQL 直接在 psql 中执行看看是否依然这么慢?可以用执行计划查看数据库慢在那一步,按你这种写法是使用全表扫描了。

ref: http://blog.chinaunix.net/uid-1925643-id-2791346.html

避免在等号左边用转换函数,例如to_char,to_date等,索引为发挥作用

select count(*) from stock_begin a
where  to_char(inputdt,'yyyy-mm-dd')=to_char(sysdate,'yyyy-mm-dd') 
//耗时19m


可以优化为一下语句,这样充分用到索引了
select count(*) from stock_begin a   //耗时0.03m
   where  a.inputdt >=to_date(to_char(sysdate,'yyyy-mm-dd')||' 00:00:00','yyyy-mm-dd hh24:mi:ss') 
         and a.inputdt <=to_date(to_char(sysdate,'yyyy-mm-dd')||' 23:59:59','yyyy-mm-dd hh24:mi:ss')
edwardzhou 回复

谢谢!学习了,改为这样了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号