CNode

node-mysql-sexy-query 友好的 MySQL 查询

Vvfasky发布于14 年前最后回复13 年前34 回复13445 浏览0 收藏

mysql-sexy-query

一个优雅的 sql 构造器

ORM 级别的太重了, 没详细研究. 我想找一个轻巧的,语义化的 mysql 库, 还是没有找到.

而 mongodb 对于只有 512M 内存的vps,是遥不可及. 于是,一个轮子又出来的:

新版特性 :

  • 用 CoffeeScript 重构代码
  • 降偶,使用适配器的方式与驱动连接

文档

README.md

DEMO :


    ### 
      use CoffeeScript
      使用 node-mysql 适合器 ,
      注: 如使用 mysql-native ,代码为:
      mysql = require('node-mysql-sexy-query').mysql_native
    ###
    mysql = require('node-mysql-sexy-query').mysql
        
    connection = mysql.create_connection(
      host     : 'localhost',
      user     : 'root',
      password : '',
      database : 'test'
    )

    class User extends mysql
        table_name : 'user'
        connection : connection

    class Role extends mysql
        table_name : 'role'
        connection : connection
        
    # 查询 id 为 1 的用户
    User.find('id = ?' , 1).execute (rows) ->
        console.log rows
        
    # 'order' and 'get'
    User.find().order('id DESC').get(10 , (rows) ->
        console.log rows
    ) 

    # 查询所有 sex 为 0 的用户
    User.find('sex = ?' , 0).all (rows) ->
        console.log rows 
        
    # 统计 count
    User.find('sex = ?' , 0).count (count) ->
        console.log count
        
    # 分页
    ar = User.find().order('id DESC').page(1,10) 
    ar.execute (rows) ->
        console.log rows
    # 分页信息
    ar.get_pagination (pagination) ->
        console.log pagination 
        
    ### 
    关联查询 join
    注: 这里 `@` 代表 User 表 
    ###
    User.as('U').join(Role.as('R') , '@.role_id = R.id')
        .select('@.id , @.name , R.name AS role')
        .page(1,10)
        .execute (rows) ->
            console.log rows
    

安装方法

npm install git[@github](/user/github).com:vfasky/node-mysql-sexy-query.git
查看回复

回复 (32)

C
cnxhk#1·14 年前

看上去非常友好!不过效率怎么样?目前用的nodejs-mysql-native,效率比mysql那个模块好

V
vfasky#2·14 年前
引用 cnxhk看上去非常友好!不过效率怎么样?目前用的nodejs mysql native,效率比mysql那个模块好

mysql-sex-query 只是一个sql 生成器,相信移植到mysql-sex-query的成本很低

J
j4cnodejs#3·14 年前

sex-query 这样的命名不太妥吧?"性查询"? 建议换成 sexy-query 或 cute-query 比较好!仅供参考! BTW:构思不错!

C
cnxhk#6·14 年前
引用 cnxhk看上去非常友好!不过效率怎么样?目前用的nodejs mysql native,效率比mysql那个模块好

@vfasky 已解决,已Pull request,作者也回复了,但是就是没合并。。。

V
vfasky#7·14 年前
引用 cnxhk看上去非常友好!不过效率怎么样?目前用的nodejs mysql native,效率比mysql那个模块好

@cnxhk 分支地址是?

G
guilin#9·14 年前
引用 j4cnodejssex query 这样的命名不太妥吧?"性查询"? 建议换成 sexy query 或 cute query 比较好!仅供参考! BTW:构思不错!

@vfasky 支持, sexy, 名字可以改. npm 可以 unpublish, github 可以 rename, 另外 orWhere 建议直接叫做 or

P
pengchun#12·14 年前

可以试试sannis的libmysqlclient https://github.com/Sannis/node-mysql-libmysqlclient ;我们也贡献了几个patch,包括利用libuv实现的真正意义上的异步querySend

V
vfasky#13·14 年前
引用 pengchun可以试试sannis的libmysqlclient https://github.com/Sannis/node mysql libmysqlclient ;我们也贡献了几个patch,包括利...

@pengchun 这个对中文支持怎样? 看来 mysql-sexy-query 要加个工厂模块. ^_^

B
bobchennan#15·14 年前
引用 cnxhk看上去非常友好!不过效率怎么样?目前用的nodejs mysql native,效率比mysql那个模块好

@vfasky 写入中文问题是指? 因为我的解决方法是写入时做一遍UTF8编码,所以直接在mysql中查看会有乱码,但是从我的实验结果来看程序读取不会有问题?

V
vfasky#16·14 年前
引用 cnxhk看上去非常友好!不过效率怎么样?目前用的nodejs mysql native,效率比mysql那个模块好

@bobchennan code 行:105 this.connection.charset 的值没有定义 改为this.client.charset 写入中文就正常了

V
vfasky#17·14 年前
引用 pengchun可以试试sannis的libmysqlclient https://github.com/Sannis/node mysql libmysqlclient ;我们也贡献了几个patch,包括利...

@pengchun 我在本地centos6下安装失败,但同样环境的vps(日本线路)成功了,莫非墙的问题?

P
pengchun#21·14 年前

npm.log里可以看看到底什么原因

J
JacksonTian#22·14 年前

好厉害。

V
v8node#23·14 年前

很不错

S
skyblue#24·14 年前

只是作为一个query的话,不太能接受这种连贯接口写sql的...

J
jin52yang#25·14 年前

有性能的相关测试结果吗?

Q
qimiguang#26·14 年前

关于page()有个疑问, 我看生成的sql语句 limit 里面的数字始终跟page里定义的对不上号啊

Q
qimiguang#27·14 年前

还有关于添加数据,可以成功添加进数据库,但是却执行了console.log('添加失败'),id为0

S
supersheep#28·14 年前

所以现在这个包在npm上叫上叫啥?原名已经找不到了orz

V
vfasky#29·14 年前

@qimiguang 不好意思,最近有点忙 新版已经解决了你所发现的问题, 且语法跟旧版都有点变法

@supersheep npm install git@github.com:vfasky/node-mysql-sexy-query.git

@jin52yang 她只负责生成 sql

L
lgyhitler#32·13 年前

有个问题,要是 长时间不操作mysql,连接就失效了。怎样在下次请求时候重新连接呢?在哪儿处理呢 因为是基于mysql-native的,跟node-mysql不一样啊。

参与回复
登录后即可参与回复。登录