连接到 MySQL 文档存储所需的代码看起来很像传统的 MySQL 连接代码,但现在应用程序可以与运行 X 插件的 MySQL 服务器实例建立逻辑会话。会话由
mysqlx
工厂生产,返回的会话可以封装对一个或多个运行 X Plugin 的 MySQL 服务器实例的访问。默认情况下使用 Session 对象的应用程序可以部署在单服务器设置和数据库集群上,无需更改代码。
mysqlx.getSession(connection)
使用该方法
创建 X DevAPI 会话
。您传入连接参数以连接到 MySQL 服务器,例如主机名和用户,这与经典 API 之一中的代码非常相似。连接参数可以指定为 URI 类型字符串,例如
user:@localhost:33060
,或指定为数据字典,例如{user: myuser, password: mypassword, host:
example.com, port: 33060}
。有关详细信息,请参阅
使用类似 URI 的字符串或键值对连接到服务器。
用于连接的 MySQL 用户帐户应使用mysql_native_password
或
caching_sha2_password
身份验证插件,请参阅可插入身份验证。您要连接的服务器应该启用加密连接,这是 MySQL 8.0 中的默认设置。这确保客户端使用 X 协议PLAIN
密码机制,该机制与使用任一身份验证插件的用户帐户一起使用。如果您尝试连接到未启用加密连接的服务器实例,对于使用
mysql_native_password
插件身份验证MYSQL41
的用户帐户,首先尝试使用,对于使用caching_sha2_password
身份验证的用户帐户,则回退到SHA256_MEMORY
.
以下示例代码显示了如何连接到 MySQL 服务器并从my_collection
集合中获取字段name
以 开头的文档L
。该示例假定test
存在名为的模式,并且
my_collection
集合存在。要使示例正常运行,请替换user
为您的用户名和
密码。如果您要连接到不同的主机或通过不同的端口,请将主机从 更改为
password
localhost
,端口从
更改为33060
。
MySQL 外壳 JavaScript 代码
var mysqlx = require('mysqlx');
// Connect to server on localhost
var mySession = mysqlx.getSession( {
host: 'localhost', port: 33060,
user: 'user', password: 'password' } );
var myDb = mySession.getSchema('test');
// Use the collection 'my_collection'
var myColl = myDb.getCollection('my_collection');
// Specify which document to find with Collection.find() and
// fetch it from the database with .execute()
var myDocs = myColl.find('name like :param').limit(1).
bind('param', 'L%').execute();
// Print document
print(myDocs.fetchOne());
mySession.close();
MySQL 外壳 Python 代码
from mysqlsh import mysqlx
# Connect to server on localhost
mySession = mysqlx.get_session( {
'host': 'localhost', 'port': 33060,
'user': 'user', 'password': 'password' } )
myDb = mySession.get_schema('test')
# Use the collection 'my_collection'
myColl = myDb.get_collection('my_collection')
# Specify which document to find with Collection.find() and
# fetch it from the database with .execute()
myDocs = myColl.find('name like :param').limit(1).bind('param', 'L%').execute()
# Print document
document = myDocs.fetch_one()
print(document)
mySession.close()
Node.js JavaScript 代码
var mysqlx = require('@mysql/xdevapi');
// Connect to server on localhost
mysqlx
.getSession({
user: 'user',
password: 'password',
host: 'localhost',
port: '33060'
})
.then(function (session) {
var db = session.getSchema('test');
// Use the collection 'my_collection'
var myColl = db.getCollection('my_collection');
// Specify which document to find with Collection.find() and
// fetch it from the database with .execute()
return myColl
.find('name like :param')
.limit(1)
.bind('param', 'L%')
.execute(function (doc) {
console.log(doc);
});
})
.catch(function (err) {
// Handle error
});
C#代码
// Connect to server on localhost
var mySession = MySQLX.GetSession("server=localhost;port=33060;user=user;password=password;");
var myDb = mySession.GetSchema("test");
// Use the collection "my_collection"
var myColl = myDb.GetCollection("my_collection");
// Specify which document to find with Collection.Find() and
// fetch it from the database with .Execute()
var myDocs = myColl.Find("name like :param").Limit(1)
.Bind("param", "L%").Execute();
// Print document
Console.WriteLine(myDocs.FetchOne());
mySession.Close();
Python代码
import mysqlx
# Connect to server on localhost
my_session = mysqlx.get_session({
'host': 'localhost', 'port': 33060,
'user': 'user', 'password': 'password'
})
my_schema = my_session.get_schema('test')
# Use the collection 'my_collection'
my_coll = my_schema.get_collection('my_collection')
# Specify which document to find with Collection.find() and
# fetch it from the database with .execute()
docs = my_coll.find('name like :param').limit(1).bind('param', 'L%').execute()
# Print document
doc = docs.fetch_one()
print(doc)
my_session.close()
Java代码
import com.mysql.cj.xdevapi.*;
// Connect to server on localhost
Session mySession = new SessionFactory().getSession("mysqlx://localhost:33060/test?user=user&password=password");
Schema myDb = mySession.getSchema("test");
// Use the collection 'my_collection'
Collection myColl = myDb.getCollection("my_collection");
// Specify which document to find with Collection.find() and
// fetch it from the database with .execute()
DocResult myDocs = myColl.find("name like :param").limit(1).bind("param", "L%").execute();
// Print document
System.out.println(myDocs.fetchOne());
mySession.close();
C++代码
#include <mysqlx/xdevapi.h>
// Scope controls life-time of objects such as session or schema
{
Session sess("localhost", 33060, "user", "password");
Schema db= sess.getSchema("test");
// or Schema db(sess, "test");
Collection myColl = db.getCollection("my_collection");
// or Collection myColl(db, "my_collection");
DocResult myDocs = myColl.find("name like :param")
.limit(1)
.bind("param","L%").execute();
cout << myDocs.fetchOne();
}