WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Этот раздел объясняет понятие связей и сессий, как используются в X
DevAPI. Примеры кода для соединения с MySQL Document Store (см.
Using MySQL as a Document Store) и применения сессий. Сессия X DevAPI это понятие сессии базы данных высокого уровня, которое
отличается от работы с традиционными подключениями низкого уровня MySQL.
Сессии могут заключить в капсулу одно или несколько фактических подключений
MySQL, используя X-протокол. Использование этого более высокого уровня
абстракции отцепляет физическую установку MySQL от кода приложения.
Сессии оказывают полную поддержку X DevAPI и ограниченную поддержку SQL.
При использовании MySQL Shell, когда подключение mysql низкого уровня
к единственному серверу MySQL необходимо, это все еще поддерживается при
помощи ClassicSession, который оказывает полную поддержку SQL. Перед рассмотрением понятий более подробно, следующие примеры
показывают, как соединиться с использованием сессии. Код, который необходим, чтобы соединиться с MySQL document store,
походит на традиционный код подключения mysql, но теперь запросы
могут установить логические сессии к серверу MySQL с X Plugin.
Сессии производятся Учетная запись пользователя MySQL, используемая для связи, должна
использовать любой плагин
Следующий пример кода показывает, как соединиться с сервером MySQL и
получить документ от коллекции MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code Есть несколько способов использовать сессию, чтобы соединиться с MySQL в
зависимости от определенной установки в использовании. В этом примере связь с местным сервером MySQL, управляющим X Plugin на
порту TCP/IP 33060 устанавливается, используя учетную запись пользователя
MySQL MySQL Shell JavaScript Code
MySQL Shell Python Code Следующий пример показывает, как соединиться с единственным сервером
MySQL, обеспечив TCP/IP адрес localhost
с той же самой учетной записи пользователя как прежде. MySQL Shell JavaScript Code
MySQL Shell Python Code C# Code Python Code Java Code C++ Code X DevAPI поддерживает объединение связи, которое может уменьшить
издержки для запросов, которые открывают много связей с сервером MySQL.
Связи организованы как пул объектов клиента. Открывая новую сессию с
клиентом, прежде чем новое сетевое соединение открыто, будет предпринята
попытка, чтобы восстановить из пула существующую и в настоящее время
неиспользованную связь, которая перезагружается и снова используется. Пул связи формируется, используя единственную пару ключ/значение (см.
Connecting Using Key-Value Pairs) с единственным именем
ключа
Таблица 2.1. Опции для формирования пула связи Закрытие сессии отмечает основную связь как неиспользованную и возвращает
ее к пулу связи объекта клиента. Закрытие объекта клиента закрывает все связи, с которыми он работает,
все сессии, которые клиент создал и разрушает пул. Объединение связи не поддерживается MySQL Shell. Node.js JavaScript Code C# Code Python Code Java Code C++ Code Connector/C++ Code using
X DevAPI for C Используя сессию, следующие опции доступны, чтобы формировать связь. Опция Имя Обязательность По умолчанию Примечания TCP/IP Host host - localhost, имя хоста IPv4, не IP-диапазон TCP/IP Port port Yes 33060 Стандартный порт X Plugin 33060 MySQL user dbUser - Пользователь БД MySQL MySQL password dbPassword - Пароль для MySQL Поддержанные методы аутентификации: PLAIN MYSQL 4.1 Элементы URI и формат. Рис. 2.1. URI соединения ConnectURI1::= 'dbUser' ':' 'dbPassword' '@' 'host' ':' 'port' Все предыдущие примеры, использовали
Эта цепь объекта эквивалентна следующей, с тем
различием, что промежуточный шаг опущен: Нет никакого постоянного требования к цепи, пока вы не получаете объект
схемы. Если вы хотите работать с объектом сессии, например, вызвать метод
объекта сессии MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code В этом примере функция В дополнение к упрощенному синтаксису X DevAPI объекта сессии у объекта
сессии есть функция Следующий пример использует сессию, чтобы назвать хранимую процедуру SQL
на определенном узле. MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code Используя буквальный/дословный SQL, общие образцы API это
главным образом то же самое, как с использованием DML и операций CRUD на
таблицах и коллекциях. Существуют два различия: указание текущей схемы
и возможность экранировать имена. Схема по умолчанию для сессии может быть определена, используя атрибут
Если никакая схема по умолчанию не была выбрана, функция
MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code Заметьте, что Альтернативный способ установить текущую схему состоит в том, чтобы
использовать метод sql() и оператор
Функция цитирования существует, чтобы избежать имен SQL и идентификаторов.
Функция цитирования не должна использоваться, чтобы экранировать значения.
Используйте привязку значений MySQL Shell JavaScript Code
MySQL Shell Python Code Node.js JavaScript Code C# Code Python Code Java Code C++ Code Код, который использует X DevAPI, не должен экранировать идентификаторы.
Это верно для работы с коллекциями и таблицами.
Глава 2. Связи и понятие сессии
2.1.
Пример соединения с базой данных
mysqlx
и возвращенные сессии могут заключить в капсулу доступ к одному или более
экземпляру сервера MySQL с X Plugin. Приложения, которые используют
объекты сессии по умолчанию, могут быть развернуты на единственном сервере и
на кластере базы данных без кодовых изменений. Создайте сессию, используя
mysqlx.getSession(connection)
.
Вы передаете параметры связи, чтобы соединиться с сервером MySQL, такие как
имя хоста, пользователь и так далее, как код в одном из классического API.
Параметры связи могут быть определены как любая последовательность типа URI,
например, user:@localhost:33060
,
или как словарь данных, например,
{user: myuser, password: mypassword, host:
example.com, port: 33060}
. См.
Connecting to the Server Using URI-Like Strings or
Key-Value Pairs.mysql_native_password
или
caching_sha2_password
, см.
Pluggable Authentication.
Сервер, с которым вы соединяетесь, должен зашифровать позволенные связи,
по умолчанию как MySQL 8.0. Это гарантирует, что клиент использует
механизм пароля X Protocol PLAIN
, который
работает с учетными записями пользователей, которые используют любой из
плагинов идентификации. При попытке соединиться с сервером, у которого нет
поддержки зашифрованных связей для учетных записей пользователей, которые
используют плагин mysql_native_password
,
применяя формат MYSQL41
и
caching_sha2_password
, задействуется
идентификация SHA256_MEMORY
.my_collection
,
у которой есть поле name
, начиная с
S
. Пример предполагает, что названная схема
test
существует, как и коллекция
my_collection
.
Чтобы заставить пример работать, замените
user
вашим именем пользователя и
паролем. Если вы соединяетесь с иным хостом или через иной порт,
поменяйте password
localhost
и порт как надо.
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', 'S%').execute();
// Print document
print(myDocs.fetchOne());
mySession.close();
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', 'S%').execute()
# Print document
document = myDocs.fetch_one()
print(document)
mySession.close()
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 wich document to find with Collection.find() and
// fetch it from the database with .execute()
return myColl
.find('name like :param')
.limit(1)
.bind('param', 'S%')
.execute(function (doc) {
console.log(doc);
});
})
.catch(function (err) {
// Handle error
});
// 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", "S%").Execute();
// Print document
Console.WriteLine(myDocs.FetchOne());
mySession.Close();
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', 'S%').execute()
# Print document
doc = docs.fetch_one()
print(doc)
my_session.close()
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", "S%").execute();
// Print document
System.out.println(myDocs.fetchOne());
mySession.close();
#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","S%").execute();
cout << myDocs.fetchOne();
}
2.2. Соединение с сессией
2.2.1. Соединение с единственным сервером MySQL
user
с его паролем.
Поскольку никакие другие параметры не устанавливаются, значения
по умолчанию используются.
// Passing the parameters in the { param: value } format
var dictSession = mysqlx.getSession( {
host: 'localhost', 'port': 33060,
user: 'user', password: '
password
' } )
var db1 = dictSession.getSchema('test')
// Passing the parameters in the URI format
var uriSession = mysqlx.getSession('user:password
@localhost:33060')
var db2 = uriSession.getSchema('test')
# Passing the parameters in the { param: value } format
dictSession = mysqlx.get_session( {
'host': 'localhost', 'port': 33060,
'user': 'user', 'password': '
password
' } )
db1 = dictSession.get_schema('test')
# Passing the parameters in the URI format
uriSession = mysqlx.get_session('user:password
@localhost:33060')
db2 = uriSession.get_schema('test')
// Passing the parameters in the { param: value } format
// Query the user for the account information
print("Please enter the database user information.");
var usr = shell.prompt("Username: ", {defaultValue: "user"});
var pwd = shell.prompt("Password: ", {type: "password"});
// Connect to MySQL Server on a network machine
mySession = mysqlx.getSession( {
host: 'localhost', 'port': 33060,
user: usr, password: pwd} );
myDb = mySession.getSchema('test');
# Passing the parameters in the { param: value } format
# Query the user for the account information
print("Please enter the database user information.")
usr = shell.prompt("Username: ", {'defaultValue': "user"})
pwd = shell.prompt("Password: ", {'type': "password"})
# Connect to MySQL Server on a network machine
mySession = mysqlx.get_session( {
'host': 'localhost', 'port': 33060,
'user': usr, 'password': pwd} )
myDb = mySession.get_schema('test')
// Query the user for the user information
Console.WriteLine("Please enter the database user information.");
Console.Write("Username: ");
var usr = Console.ReadLine();
Console.Write("Password: ");
var pwd = Console.ReadLine();
// Connect to server on localhost using a connection URI
var mySession = MySQLX.GetSession(string.Format("mysqlx://localhost:33060/test?user={0}&password={1}", usr, pwd));
var myDb = mySession.GetSchema("test");
# Passing the parameters in the { param: value } format
dict_session = mysqlx.get_session({
'host': 'localhost', 'port': 33060,
'user': 'user', 'password': 'password'
})
my_schema_1 = dict_session.get_schema('test')
# Passing the parameters in the URI format
uri_session = mysqlx.get_session('user:password@localhost:33060')
my_schema_2 = uri_session.get_schema('test')
import com.mysql.cj.xdevapi.*;
// Connect to server on localhost using a connection URI
Session mySession = new SessionFactory().getSession("mysqlx://localhost:33060/test?user=user&password=password");
Schema myDb = mySession.getSchema("test");
// This code sample assumes that we have function prompt() defined somewhere.
string usr = prompt("Username:");
string pwd = prompt("Password:");
// Connect to MySQL Server on a network machine
Session mySession(SessionOption::HOST, "localhost",
SessionOption::PORT, 33060,
SessionOption::USER, usr,
SessionOption::PWD, pwd);
// An alternative way of defining session settings.
SessionSettings settings(SessionOption::HOST,"localhost",
SessionOption::PORT, 33060);
settings.set(SessionOption::USER, usr);
settings.set(SessionOption::PWD, pwd);
Session mySession(settings);
Schema myDb= mySession.getSchema("test");
2.2.2. Соединение с единственным сервером MySQL,
используя объединение связи
pooling
. Значение ключа
polling
это набор пар ключ/значение, содержащих
любую комбинацию ключей, описанных в следующей таблице:
Опция Смысл
По умолчанию enabled
Объединение связи позволено. Когда выбор установлен в
false
, возвращена регулярная, необъединенная
связь, и другие упомянутые ниже опции проигнорированы.true maxSize
Максимальное количество связей в пуле.
25 maxIdleTime
Максимальное количество миллисекунд, которое связь может не работать в
очереди прежде чем ее закроют. Нулевое значение означает бесконечность.
0 queueTimeout
Максимальное количество миллисекунд, которое запросу позволяют ждать
связи. Нулевое значение означает бесконечность.
0
var mysqlx = require('@mysql/xdevapi');
var client = mysqlx.getClient(
{ user: 'root', host: 'localhost', port: 33060 },
{ pooling: { enabled: true, maxIdleTime: 30000, maxSize: 25, queueTimeout: 10000 } }
);
client.getSession()
.then(session => {
console.log(session.inspect())
return session.close() // the connection becomes idle in the client pool
})
.then(() => {
return client.getSession()
})
.then(session => {
console.log(session.inspect())
return client.close() // closes all connections and destroys the pool
})
using (Client client = MySQLX.GetClient("server=localhost;user=root:port=33060;",
new { pooling = new { Enabled = true, MaxSize = 100, MaxIdleTime=30000, QueueTimeout = 10000 } }))
{
using (Session session = client.GetSession())
{
foreach (Collection coll in session.Schema.GetCollections())
{
Console.WriteLine(coll.Name);
}
} // session.Dispose() is called and the session becomes idle in the pool
} // client.Dispose() is called then all sessions are closed and pool is destroyed
connection_string = {
'host': 'localhost',
'port': 37210,
'user': 'user',
'password': 'password'
}
client_options = {
'pooling': {
"max_size": 10,
"max_idle_time": 30000
}
}
client = mysqlx.get_client(connection_string, client_options)
session1 = client.get_session()
session2 = client.get_session()
# closing all the sessions
client.close()
// Obtain new ClientFactory
ClientFactory cf = new ClientFactory();
// Obtain Client from ClientFactory
Client cli = cf.getClient(this.baseUrl, "{\"pooling\":{\"enabled\":true, \"maxSize\":8,
\"maxIdleTime\":30000, \"queueTimeout\":10000} }");
Session sess = cli.getSession();
//Use Session as usual
//Close Client after use
cli.close();
using namespace mysqlx;
Client cli("user:password@host_name/db_name", ClientOption::POOL_MAX_SIZE, 7);
Session sess = cli.getSession();
// use Session sess as usual
cli.close(); // close all Sessions
char error_buf[255];
interror_code;
mysqlx_client_t *cli = mysqlx_get_client_from_url(
"user:password@host_name/db_name", "{ \"maxSize\": 7 }", error_buf, &error_code
);
mysqlx_session_t *sess = mysqlx_get_session_from_client(cli);
// use sess as before
mysqlx_close_client(cli); // close session sess
2.2.3.
Обзор опций связи
2.3. Работа с объектом сессии
getSchema()
или
getDefaultSchema()
методы объекта Session,
которые возвращают объект схемы. Вы используете эту схему, чтобы получить
доступ к коллекциям и таблицам. Большинство примеров использует способность
X DevAPI связать все конструкции объекта в цепь, позволяя вам добраться до
объекта схемы в одной строке:
schema = mysqlx.getSession(...).getSchema();
session = mysqlx.getSession();
schema = session.getSchema().
getSchemas()
,
нет никакой потребности доходить до схемы:
session = mysqlx.getSession(); session.getSchemas().
// Connecting to MySQL and working with a Session
var mysqlx = require('mysqlx');
// Connect to a dedicated MySQL server using a connection URI
var mySession = mysqlx.getSession('user:
password
@localhost');
// Get a list of all available schemas
var schemaList = mySession.getSchemas();
print('Available schemas in this session:\n');
// Loop over all available schemas and print their name
for (index in schemaList) {
print(schemaList[index].name + '\n');
}
mySession.close();
# Connecting to MySQL and working with a Session
from mysqlsh import mysqlx
# Connect to a dedicated MySQL server using a connection URI
mySession = mysqlx.get_session('user:
password
@localhost')
# Get a list of all available schemas
schemaList = mySession.get_schemas()
print('Available schemas in this session:\n')
# Loop over all available schemas and print their name
for schema in schemaList:
print('%s\n' % schema.name)
mySession.close()
// Connecting to MySQL and working with a Session
var mysqlx = require('@mysql/xdevapi');
// Connect to a dedicated MySQL server using a connection URI
mysqlx
.getSession('user:password@localhost')
.then(function (mySession) {
// Get a list of all available schemas
return mySession.getSchemas();
})
.then(function (schemaList) {
console.log('Available schemas in this session:\n');
// Loop over all available schemas and print their name
schemaList.forEach(function (schema) {
console.log(schema.getName() + '\n');
});
});
// Connect to a dedicated MySQL server node using a connection URI
var mySession = MySQLX.GetSession("mysqlx://user:password@localhost:33060");
// Get a list of all available schemas
var schemaList = mySession.GetSchemas();
Console.WriteLine("Available schemas in this session:");
// Loop over all available schemas and print their name
foreach (var schema in schemaList)
{
Console.WriteLine(schema.Name);
}
mySession.Close();
# Connector/Python
# Connecting to MySQL and working with a Session
from mysqlsh import mysqlx
# Connect to a dedicated MySQL server using a connection URI
mySession = mysqlx.get_session('user:
password
@localhost')
# Get a list of all available schemas
schemaList = mySession.get_schemas()
print('Available schemas in this session:\n')
# Loop over all available schemas and print their name
for schema in schemaList:
print('%s\n' % schema.name)
mySession.close()
import java.util.List;
import com.mysql.cj.api.xdevapi.*;
import com.mysql.cj.xdevapi.*;
// Connecting to MySQL and working with a Session
// Connect to a dedicated MySQL server using a connection URI
Session mySession = new SessionFactory().getSession("mysqlx://localhost:33060/test?user=user&password=password");
// Get a list of all available schemas
List<Schema> schemaList = mySession.getSchemas();
System.out.println("Available schemas in this session:");
// Loop over all available schemas and print their name
for (Schema schema : schemaList) {
System.out.println(schema.getName());
}
mySession.close();
#include <mysqlx/xdevapi.h>
// Connecting to MySQL and working with a Session
// Connect to a dedicated MySQL server using a connection URI
string url = "mysqlx://localhost:33060/test?user=user&password=password";
{
Session mySession(url);
// Get a list of all available schemas
std::list<Schema> schemaList = mySession.getSchemas();
cout << "Available schemas in this session:" << endl;
// Loop over all available schemas and print their name
for (Schema schema : schemaList) {
cout << schema.getName() << endl;
}
}
mysqlx.getSession()
используется, чтобы открыть сессию. Тогда функция
Session.getSchemas()
используется, чтобы получить список всех доступных схем и напечатать
их на консоль.2.4. Использование SQL с сессией
sql()
, которая берет любой
SQL-оператор в качестве последовательности.
var mysqlx = require('mysqlx');
// Connect to server using a Session
var mySession = mysqlx.getSession('user:
password
@localhost');
// Switch to use schema 'test'
mySession.sql("USE test").execute();
// In a Session context the full SQL language can be used
mySession.sql("CREATE PROCEDURE my_add_one_procedure " +
" (INOUT incr_param INT) " +
"BEGIN " + "SET incr_param = incr_param + 1;" +
"END;").execute();
mySession.sql("SET @my_var = ?;").bind(10).execute();
mySession.sql("CALL my_add_one_procedure(@my_var);").execute();
mySession.sql("DROP PROCEDURE my_add_one_procedure;").execute();
// Use an SQL query to get the result
var myResult = mySession.sql("SELECT @my_var").execute();
// Gets the row and prints the first column
var row = myResult.fetchOne();
print(row[0]);
mySession.close();
from mysqlsh import mysqlx
# Connect to server using a Session
mySession = mysqlx.get_session('user:
password
@localhost')
# Switch to use schema 'test'
mySession.sql("USE test").execute()
# In a Session context the full SQL language can be used
sql = """CREATE PROCEDURE my_add_one_procedure
(INOUT incr_param INT)
BEGIN
SET incr_param = incr_param + 1;
END
"""
mySession.sql(sql).execute()
mySession.sql("SET @my_var = ?").bind(10).execute()
mySession.sql("CALL my_add_one_procedure(@my_var)").execute()
mySession.sql("DROP PROCEDURE my_add_one_procedure").execute()
# Use an SQL query to get the result
myResult = mySession.sql("SELECT @my_var").execute()
# Gets the row and prints the first column
row = myResult.fetch_one()
print(row[0])
mySession.close()
var mysqlx = require('@mysql/xdevapi');
var session;
// Connect to server using a Low-Level Session
mysqlx
.getSession('root:password@localhost')
.then(function (s) {
session = s;
return session.getSchema('test');
})
.then(function () {
return Promise.all([
// Switch to use schema 'test'
session.sql('USE test').execute(),
// In a Session context the full SQL language can be used
session.sql('CREATE PROCEDURE my_add_one_procedure' +
' (INOUT incr_param INT) ' +
'BEGIN ' +
'SET incr_param = incr_param + 1;' +
'END;').execute(),
session.executeSql('SET @my_var = ?;', 10).execute(),
session.sql('CALL my_add_one_procedure(@my_var);').execute(),
session.sql('DROP PROCEDURE my_add_one_procedure;').execute()
])
})
.then(function() {
// Use an SQL query to get the result
return session.sql('SELECT @my_var').execute(function (row) {
// Print result
console.log(row);
});
});
// Connect to server using a Session
var mySession = MySQLX.GetSession("server=localhost;port=33060;user=user;password=
password
;");
// Switch to use schema "test"
mySession.SQL("USE test").Execute();
// In a Session context the full SQL language can be used
mySession.SQL("CREATE PROCEDURE my_add_one_procedure " +
" (INOUT incr_param INT) " +
"BEGIN " +
"SET incr_param = incr_param + 1;" +
"END;").Execute();
mySession.SQL("SET @my_var = 10;").Execute();
mySession.SQL("CALL my_add_one_procedure(@my_var);").Execute();
mySession.SQL("DROP PROCEDURE my_add_one_procedure;").Execute();
// Use an SQL query to get the result
var myResult = mySession.SQL("SELECT @my_var").Execute();
// Gets the row and prints the first column
var row = myResult.FetchOne();
Console.WriteLine(row[0]);
mySession.Close();
# Connector/Python
from mysqlsh import mysqlx
# Connect to server using a Session
mySession = mysqlx.get_session('user:
password
@localhost')
# Switch to use schema 'test'
mySession.sql("USE test").execute()
# In a Session context the full SQL language can be used
sql = """CREATE PROCEDURE my_add_one_procedure
(INOUT incr_param INT)
BEGIN
SET incr_param = incr_param + 1;
END
"""
mySession.sql(sql).execute()
mySession.sql("SET @my_var = ?").bind(10).execute()
mySession.sql("CALL my_add_one_procedure(@my_var)").execute()
mySession.sql("DROP PROCEDURE my_add_one_procedure").execute()
# Use an SQL query to get the result
myResult = mySession.sql("SELECT @my_var").execute()
# Gets the row and prints the first column
row = myResult.fetch_one()
print(row[0])
mySession.close()
import com.mysql.cj.xdevapi.*;
// Connect to server on localhost
Session mySession = new SessionFactory().getSession("mysqlx://localhost:33060/test?user=user&password=password");
// Switch to use schema 'test'
mySession.sql("USE test").execute();
// In a Session context the full SQL language can be used
mySession.sql("CREATE PROCEDURE my_add_one_procedure " +
" (INOUT incr_param INT) " + "BEGIN " +
"SET incr_param = incr_param + 1;" + "END")
.execute();
mySession.sql("SET @my_var = ?").bind(10).execute();
mySession.sql("CALL my_add_one_procedure(@my_var)").execute();
mySession.sql("DROP PROCEDURE my_add_one_procedure").execute();
// Use an SQL query to get the result
SqlResult myResult = mySession.sql("SELECT @my_var").execute();
// Gets the row and prints the first column
Row row = myResult.fetchOne();
System.out.println(row.getInt(0));
mySession.close();
#include <mysqlx/xdevapi.h>
// Connect to server on localhost
string url = "mysqlx://localhost:33060/test?user=user&password=password";
Session mySession(url);
// Switch to use schema 'test'
mySession.sql("USE test").execute();
// In a Session context the full SQL language can be used
mySession.sql("CREATE PROCEDURE my_add_one_procedure "
" (INOUT incr_param INT) "
"BEGIN "
"SET incr_param = incr_param + 1;"
"END;")
.execute();
mySession.sql("SET @my_var = ?;").bind(10).execute();
mySession.sql("CALL my_add_one_procedure(@my_var);").execute();
mySession.sql("DROP PROCEDURE my_add_one_procedure;").execute();
// Use an SQL query to get the result
auto myResult = mySession.sql("SELECT @my_var").execute();
// Gets the row and prints the first column
Row row = myResult.fetchOne();
cout << row[0] << endl;
2.5.
Установка текущей схемы
schema
в
URI-строке подключения или парах ключ/значение,
открывая сессию связи. Метод getDefaultSchema()
возвращает схему по умолчанию для Session
.setCurrentSchema()
может использоваться, чтобы
установить текущую схему.
var mysqlx = require('mysqlx');
// Direct connect with no client-side default schema specified
var mySession = mysqlx.getSession('user:
password
@localhost');
mySession.setCurrentSchema("test");
from mysqlsh import mysqlx
# Direct connect with no client-side default schema specified
mySession = mysqlx.get_session('user:
password
@localhost')
mySession.set_current_schema("test")
/*
Connector/Node.js does not support the setCurrentSchema() method.
One can specify the default schema in the connection string.
*/
// Direct connect with no client-side default schema specified
var mySession = MySQLX.GetSession("server=localhost;port=33060;user=user;password=
password
;");
mySession.SetCurrentSchema("test");
# Connector/Python
from mysqlsh import mysqlx
# Direct connect with no client-side default schema specified
mySession = mysqlx.get_session('user:
password
@localhost')
mySession.set_current_schema("test")
/*
Connector/J does not support the setCurrentSchema() method.
One can specify the default schema in the connection string.
*/
/*
Connector/C++ does not support the setCurrentSchema() method.
One can specify the default schema in the connection string.
*/
setCurrentSchema()
не изменяет схему сессии по умолчанию, которая остается неизменной в течение
сессии или остается null
, если не задана
при связи. Схема, установленная
setCurrentSchema()
, может быть возвращена
getCurrentSchema()
.
USE
.db_name
2.6. Динамический SQL
Session.quoteName()
экранирует идентификатор,
данный в соответствии с параметрами настройки текущей связи.Session.sql()
, см.
раздел 2.4 для подробностей.
function createTestTable(session, name) {
// use escape function to quote names/identifier
quoted_name = session.quoteName(name);
session.sql("DROP TABLE IF EXISTS " + quoted_name).execute();
var create = "CREATE TABLE ";
create += quoted_name;
create += " (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT)";
session.sql(create).execute();
return session.getCurrentSchema().getTable(name);
}
var mysqlx = require('mysqlx');
var session = mysqlx.getSession('user:
password
@localhost:33060/test');
var default_schema = session.getDefaultSchema().name;
session.setCurrentSchema(default_schema);
// Creates some tables
var table1 = createTestTable(session, 'test1');
var table2 = createTestTable(session, 'test2');
def createTestTable(session, name):
# use escape function to quote names/identifier
quoted_name = session.quote_name(name)
session.sql("DROP TABLE IF EXISTS " + quoted_name).execute()
create = "CREATE TABLE "
create += quoted_name
create += " (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT)"
session.sql(create).execute()
return session.get_current_schema().get_table(name)
from mysqlsh import mysqlx
session = mysqlx.get_session('user:
password
@localhost:33060/test')
default_schema = session.get_default_schema().name
session.set_current_schema(default_schema)
# Creates some tables
table1 = createTestTable(session, 'test1')
table2 = createTestTable(session, 'test2')
var mysqlx = require('mysqlx');
function createTestTable(session, name) {
var create = 'CREATE TABLE ';
create += name;
create += ' (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT)';
return session
.sql('DROP TABLE IF EXISTS ' + name)
.execute()
.then(function () {
return session.sql(create).execute();
});
}
var session;
mysqlx
.getSession({
user: 'user',
password: 'password'
})
.then(function (s) {
session = s;
return session
.sql('use myschema')
.execute()
})
.then(function () {
// Creates some tables
return Promise.map([
createTestTable(session, 'test1'),
createTestTable(session, 'test2')
])
})
.then(function () {
session.close();
})
});
var session = MySQLX.GetSession("server=localhost;port=33060;user=user;password=
password
;");
session.SQL("use test;").Execute();
session.GetSchema("test");
// Creates some tables
var table1 = CreateTestTable(session, "test1");
var table2 = CreateTestTable(session, "test2");
private Table CreateTestTable(Session session, string name)
{
// use escape function to quote names/identifier
string quoted_name = "`" + name + "`";
session.SQL("DROP TABLE IF EXISTS " + quoted_name).Execute();
var create = "CREATE TABLE ";
create += quoted_name;
create += " (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT)";
session.SQL(create).Execute();
return session.Schema.GetTable(name);
}
# Connector/Python
def createTestTable(session, name):
# use escape function to quote names/identifier
quoted_name = session.quote_name(name)
session.sql("DROP TABLE IF EXISTS " + quoted_name).execute()
create = "CREATE TABLE "
create += quoted_name
create += " (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT)"
session.sql(create).execute()
return session.get_current_schema().get_table(name)
from mysqlsh import mysqlx
session = mysqlx.get_session('user:
password
@localhost:33060/test')
default_schema = session.get_default_schema().name
session.set_current_schema(default_schema)
# Creates some tables
table1 = createTestTable(session, 'test1')
table2 = createTestTable(session, 'test2')
Java does not currently support the quoteName() method.
#include <mysqlx/xdevapi.h>
// Note: The following features are not yet implemented by
// Connector/C++:
// - DataSoure configuration files,
// - quoteName() method.
Table createTestTable(Session &session, const string &name)
{
string quoted_name = string("`") + session.getDefaultSchemaName() +
L"`.`" + name + L"`";
session.sql(string("DROP TABLE IF EXISTS") + quoted_name).execute();
string create = "CREATE TABLE ";
create += quoted_name;
create += L"(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT)";
session.sql(create).execute();
return session.getDefaultSchema().getTable(name);
}
Session session(33060, "user", "password");
Table table1 = createTestTable(session, "test1");
Table table2 = createTestTable(session, "test2");
Найди своих коллег! |
Вы можете направить письмо администратору этой странички, Алексею Паутову.