sails
Version:
API-driven framework for building realtime apps, using MVC conventions (based on Express and Socket.io)
83 lines (59 loc) • 2.93 kB
Markdown
# Low-level MySQL usage (advanced)
This tutorial steps through how to access the raw MySQL connection instance from the [`mysql` package](https://www.npmjs.com/package/mysql). This is useful for getting access to low level APIs available only in the raw client itself.
> Note: Many Node.js / Sails apps using MySQL will never need the kind of low-level usage described here. If you find yourself running up against the limitations of the ORM, there is usually a workaround that does not involve writing code for the underlying database. Even then, if you're just looking to use custom native SQL queries, read no further-- instead, check out [`sendNativeQuery()`](/documentation/reference/waterline-orm/datastores/send-native-query) instead.
>
> Also, before we proceed, make sure you have a datastore configured to use a functional MySQL database.
### Get access to an active MySQL connection
To obtain an active connection from the MySQL package you can call the [`.leaseConnection()`](/documentation/reference/waterline-orm/datastores/lease-connection) method of a registered datastore object (RDI).
1. Get the registered datastore instance for the connection:
```javascript
// Get the named datastore
var rdi = sails.getDatastore('default');
// Get the datastore configured for a specific model
var rdi = Product.getDatastore();
```
2. Call the `leaseConnection()` method to obtain an active connection:
```javascript
rdi.leaseConnection(function(connection, proceed) {
db.query('SELECT * from `user`;', function(err, results, fields) {
if (err) {
return proceed(err);
}
proceed(undefined, results);
});
}, function(err, results) {
// Handle results here after the connection has been closed
})
```
### Get access to the low-level driver
To get access to the low-level driver and MySQL package in a Sails app, you can grab them from the registered datastore object (RDI).
1. Get the registered datastore instance for the connection:
```javascript
// Get the named datastore
var rdi = sails.getDatastore('default');
// Get the datastore configured for a specific model
var rdi = Product.getDatastore();
```
2. Get the driver from the datastore instance which contains the MySQL module:
```javascript
var mysql = rdi.driver.mysql;
```
3. You can now use the module to make native requests and call other function native to the MySQL module:
```javascript
// Get the named datastore
var rdi = sails.getDatastore('default');
// Grab the MySQL module from the datastore instance
var mysql = rdi.driver.mysql;
// Create a new connection
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'password',
database: 'example_database'
});
// Make a query and pipe the results
connection.query('SELECT * FROM posts')
.stream({highWaterMark: 5})
.pipe(...);
```
<docmeta name="displayName" value="Low-level MySQL usage (advanced)">