База данных mySQL



  • Программа отличная, автору огромное спасибо за сабж.
    Вот только в упор не могу понять, как работать с базой данных. Есть у меня mySQL база, сервер на localhost, а вот добовлять данные из BAS приходиться через текстовый файл.. Берём bat файл, добовляем данные в базу.. Только вот одновременно может добовляться один файл..



  • Гугл выдал интересную мысль. Что для Node.js написали драйвер для подключения к MySQL. https://github.com/mysqljs/mysql
    https://www.npmjs.com/package/mysql
    На BAS подойдёт?



  • @Fox прямо сейчас в бас нет возможности конектится напрямую к базам, скоро будет, админ говорил. А пока используй get/post c http client для получения/записи данных в базу многопоточно.



  • Хорошо. А можно по подробнее про запросы с хттп клиентом?



  • @Fox на локалхосте нужно создать скрипт на любом серверном языке прогр. (аля php) создать страницу с формой , и обработчик этой формы на php. Дальше с БАС посылать запрос на эту страницу, php будет его получать и делать то, что указано читать/записывать данные в базу.



  • @Fox Будет монго, а не мускул.
    С mysql работать довольно просто

    0_1484668405420_MysqlRunProcess.png
    Пример проекта
    mysql.xml

    После выполнения проекта в списке PARSED_LIST будут строки, которые вернул запрос.



  • @support Спасибо ОГРОМНОЕ!! Я пробывал через запуск приложения. E:\MySQL\MySQL Server 5.5\bin\mysql.exe с атрибутами -uroot -p1 -Dproject<table.txt , но он ни в какую не хотел добавлять. Пришлось запускать bat файл с этой строкой ))



  • @Fox Аргументы в той команде не очень удачный параметр, он сделан для того, чтобы эскейпить спец символы, а по факту сбивает всех с толку. Но можно командную строку писать с том же поле, где exe



  • @support А данные в каком виде теперь добавлять в переменную для добавления в базу?
    У меня было REPLACE INTO table VALUES ('name', 'price', NOW());

    Массив данных у меня в переменной LIST_FROM_STRING
    mysql.exe -uroot -p1 -Dproject<[[LIST_FROM_STRING]] ?

    Данные не обновляются в базе :(



  • @Fox Вам нужно

    1. Сформировать строку, которая была бы запросом.
    2. Вывести ее в лог.
    3. Проверить этот запрос в командной строке.

    Ну и использовать его в действии "Запустить процесс"

    Если что-то не обновляется, в переменной PROCESS_OUTPUT находится лог, читайте его, анализируйте сообщение об ошибке.



  • @support И так и сяк пробовал, скачиваю файл mysql.exe и table.txt в папку с проектом, если в командной строке зайти в него и выполнить mysql.exe -uroot -p1 -Dproject<table.txt, данные добавляются. А если точно такую же написать в Запустить процесс, то ни чего не добавляется. Переменная PROCESS_OUTPUT пустая, испектор переменных выдаёт "".



  • @Fox Да, действительно перенаправление ввода (<) пока не работает, но ситуацию можно легко решить используя batch файл.
    mysql.xml

    В дальнейшем это действие будет улучшено.



  • @Fox Исправил. Теперь действие запустить процесс выглядит так
    0_1485374129888_LaunchProcess.png

    И воспринимает перенаправление потока.



  • Одинарные кавычки тоже надо экранировать? Как и в бат файле? Replace ' на '' ?



  • Опытным путём проверил, кавычки надо экранировать.. Плюс не получилось воспользоваться запросом без сохранения файла. Список TABLE сохраняем в файла TABLE.TXT, выполняем команду

    mysql.exe -uroot -p1 -Dproject<TABLE.TXT
    

    Всё работает.
    А если на прямую:

    mysql.exe -uroot -p1 -Dproject -e "[[TABLE]]"
    

    То не работает.
    Пробовал текст запроса вставлять в командную строку

    "C:\MySQL\MySQL Server 5.5\bin\mysql.exe" -uroot -p1 -Dproject -e "REPLACE INTO test VALUES ('name', 'price', NOW());REPLACE INTO test VALUES ('name2', 'price2', NOW());REPLACE INTO test VALUES ('name3', 'price3', NOW());"
    

    Всё работает, но если её же запустить в BAS то данные в базе не обновятся..
    Вообщем жду обещанное обновление :)

    @support said in Xpath Xml и базы:

    Работа с базой сразу после релиза отпечатков, пока можно использовать такой метод



  • @Fox

    Всё работает, но если её же запустить в BAS то данные в базе не обновятся..

    Если вы выполняете действие с каким либо параметром, то это все равно, что создать bat файл с точно таким же содержимым и выполнить его.
    Если это не работает, то значит и bat файл с таким же содержимым не работает.

    0_1489752802942_BatchExecute.png

    Вообщем жду обещанное обновление :)

    В нем будет только монго, но с удобным редактором данным.

    Какая у вас задача стоит? Если просто сохранять/получать данные в хранилище, то апдейт поможет. Если общаться с базой магазина, то нет.



  • Да, косяк был в длине команды, проверка в логе показала, что из переменной данные обрывались.. Если вставлять в команду переменную со списком.
    Зато вы дали интересную мысль для другого проекта

    действие с каким либо параметром, то это все равно, что создать bat файл

    Так как команда копировать папку не заменяет файлы при совпадении имён, мне приходилось создавать бат файл.. Теперь можно проще :)

    Какая у вас задача стоит? Если просто сохранять/получать данные в хранилище, то апдейт поможет. Если общаться с базой магазина, то нет.

    Задача тривиальная, спарсенные данные залить в свою базу, всё.



  • У меня такая ситуация:
    чтобы в реальном времени запускать в работу аккаунты у которых прошло уникальное время с определённого момента, я сделал на MySQL базу с тремя таблицами. Рабочий скрипт (постер) отправляет запрос на получение акка в таблицу T1. Этот скрипт запущен в многопоте. Далее есть второй скрипт - "менеджер аккаунтов". Он работает в один поток и выполняет такую последовательность: читает из таблицы T1 одну запись, удаляет её, потом по нужному условию (прошло ли нужное время) находит подходящий аккаунт в таблице T2, меняет там время, чтобы в следующий раз акк не попался снова и записывает этот акк в таблицу T3. Это занимает у него обычно 10 секунд. Тем временем первый скрипт "постер" в цикле проверяет таблицу T3 и, когда находит акк, предназначеный ему, то забирает и удаляет запись. (Бас работает с бд так, как в этой теме показано.)

    Внимание, вопрос знатокам: Как сократить время работы скрипта "менеджер аккаунтов" в 5-10 раз? :)
    Потому-что он просто не успевает раздавать акки и создает простой ресурсов (память и проц не забиты).
    Он специально запущен в один поток, чтобы не допускать конфликтов записи-чтении аккаунтов.
    Но я даже провел эксперимент - разбил акки на три базы с такой же структурой и запустил к каждой базе по копии менеджера и постера. Но вместо трех потоков по 10 сек на акк, я получил три потока по 1 минуте на акк. Попробовал в два потока - 30-40 сек. Что можете посоветовать?



  • В общем, отказался от этой затеи и перенес все в глобальный список и синхронно с ним работаю. Не совсем то, что хотел, но зато суперскорость.


Log in to reply