Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

希望曾加个replace into的方法 #4

Closed
lifetin opened this issue Jan 9, 2021 · 8 comments
Closed

希望曾加个replace into的方法 #4

lifetin opened this issue Jan 9, 2021 · 8 comments

Comments

@lifetin
Copy link
Contributor

lifetin commented Jan 9, 2021

现在的add中的防重有点不适合.
希望曾加个replace into的方法

@guyue88
Copy link
Owner

guyue88 commented Jan 9, 2021

@lifetin 最近没得空,你可以pull request一个啊,我合进去!

@lifetin
Copy link
Contributor Author

lifetin commented Jan 9, 2021

我写了下,和你的有点区别, 其实就是把insert into 改个名就完了

replace( data ) { if ( this.field.length > 0 ) { data = _.pick( data, this.field ) } let keys = _.keys( data ).map( it =>`${it}`).join( ',' ) let values = _.values( data ).map( it =>'${it}').join( ',' ) let sql =replace into ${this.table} (${keys}) values(${values}) return this.query( sql ) }

@guyue88
Copy link
Owner

guyue88 commented Jan 9, 2021

我写了下,和你的有点区别, 其实就是把insert into 改个名就完了

replace( data ) { if ( this.field.length > 0 ) { data = _.pick( data, this.field ) } let keys = _.keys( data ).map( it =>``${it}``).join( ',' ) let values = _.values( data ).map( it =>'${it}').join( ',' ) let sql =replace into ${this.table} (${keys}) values(${values}) return this.query( sql ) }

测试过吗?你pull 一个呗,我合进去,测试一下!

@lifetin
Copy link
Contributor Author

lifetin commented Jan 9, 2021

replace(column) { if (!this._tableName) { throw new Error('unknown table name!'); } let sql = 'REPLACE INTO ' + this._tableName; const keyArr = []; const valueArr = []; for (const i in column) { keyArr.push('' + i + ''); valueArr.push('\'' + column[i] + '\''); } sql += ' (' + keyArr.join(',') + ')'; sql += ' VALUES (' + valueArr.join(',') + ')'; this.sql = sql; return this.query(sql); }

我自己写的是用了lodash, 你这个很简单 了,其实就是把add方法复制改为replace into 就行了.
第一段是我项目用的, 我自己写的是测了正常
第二段,是你的方法复制改了下.没测

@guyue88
Copy link
Owner

guyue88 commented Jan 9, 2021

replace(column) { if (!this._tableName) { throw new Error('unknown table name!'); } let sql = 'REPLACE INTO ' + this._tableName; const keyArr = []; const valueArr = []; for (const i in column) { keyArr.push('' + i + ''); valueArr.push('\'' + column[i] + '\''); } sql += ' (' + keyArr.join(',') + ')'; sql += ' VALUES (' + valueArr.join(',') + ')'; this.sql = sql; return this.query(sql); }

我自己写的是用了lodash, 你这个很简单 了,其实就是把add方法复制改为replace into 就行了.
第一段是我项目用的, 我自己写的是测了正常
第二段,是你的方法复制改了下.没测

好,我找个时间加一下

@lifetin
Copy link
Contributor Author

lifetin commented Jan 9, 2021

另外还发现个问题,

每一次执行任何操作,都会执行query,而query方法每次都要重连数据库
connection = this._getConnection();
我这边在使用时,大量的写数据,目前还不算多,一分钟几十几百条的写或更新.就会出错,提示连接过多 Too many connections

检查了你的代码,然后自己改了下
new myslq时,在constructor就直接连接调用connection = this._getConnection();
然后保存connection 复用,不用再调用_close()了
这样改后,900多条入库的数据,直接入库,也不会报错了.

还有.写入的数据如果有单引号,也会报错 比喻(今天是'什么'日子) 我要把这样一个文字写进去,你的转义转不了这文本里面的引号.
导至入库失败.

@lifetin
Copy link
Contributor Author

lifetin commented Jan 9, 2021

另外还发现个问题,

每一次执行任何操作,都会执行query,而query方法每次都要重连数据库
connection = this._getConnection();
我这边在使用时,大量的写数据,目前还不算多,一分钟几十几百条的写或更新.就会出错,提示连接过多 Too many connections

检查了你的代码,然后自己改了下
new myslq时,在constructor就直接连接调用connection = this._getConnection();
然后保存connection 复用,不用再调用_close()了
这样改后,900多条入库的数据,直接入库,也不会报错了.

还有.写入的数据如果有单引号,也会报错 比喻(今天是'什么'日子) 我要把这样一个文字写进去,你的转义转不了这文本里面的引号.
导至入库失败.

说简单点问题就是在 每次执行query都会重连接,执行sql,然后断开
我这边改成 new这个类时连接一次,并不再断开. 断开的方法交给业务方退时处理,也可以不用断开,因为时间长了mysql也会自动断开

@guyue88
Copy link
Owner

guyue88 commented Jan 11, 2021

已合

@guyue88 guyue88 closed this as completed Jan 11, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants