База данных 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 работать довольно просто
Пример проекта
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 Вам нужно
- Сформировать строку, которая была бы запросом.
- Вывести ее в лог.
- Проверить этот запрос в командной строке.
Ну и использовать его в действии "Запустить процесс"
Если что-то не обновляется, в переменной PROCESS_OUTPUT находится лог, читайте его, анализируйте сообщение об ошибке.
-
@support И так и сяк пробовал, скачиваю файл mysql.exe и table.txt в папку с проектом, если в командной строке зайти в него и выполнить mysql.exe -uroot -p1 -Dproject<table.txt, данные добавляются. А если точно такую же написать в Запустить процесс, то ни чего не добавляется. Переменная PROCESS_OUTPUT пустая, испектор переменных выдаёт "".
-
@Fox Да, действительно перенаправление ввода (
<
) пока не работает, но ситуацию можно легко решить используя batch файл.
mysql.xmlВ дальнейшем это действие будет улучшено.
-
@Fox Исправил. Теперь действие запустить процесс выглядит так
И воспринимает перенаправление потока.
-
Одинарные кавычки тоже надо экранировать? Как и в бат файле? 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 и базы:
Работа с базой сразу после релиза отпечатков, пока можно использовать такой метод
-
Всё работает, но если её же запустить в BAS то данные в базе не обновятся..
Если вы выполняете действие с каким либо параметром, то это все равно, что создать bat файл с точно таким же содержимым и выполнить его.
Если это не работает, то значит и bat файл с таким же содержимым не работает.Вообщем жду обещанное обновление :)
В нем будет только монго, но с удобным редактором данным.
Какая у вас задача стоит? Если просто сохранять/получать данные в хранилище, то апдейт поможет. Если общаться с базой магазина, то нет.
-
Да, косяк был в длине команды, проверка в логе показала, что из переменной данные обрывались.. Если вставлять в команду переменную со списком.
Зато вы дали интересную мысль для другого проектадействие с каким либо параметром, то это все равно, что создать bat файл
Так как команда копировать папку не заменяет файлы при совпадении имён, мне приходилось создавать бат файл.. Теперь можно проще :)
Какая у вас задача стоит? Если просто сохранять/получать данные в хранилище, то апдейт поможет. Если общаться с базой магазина, то нет.
Задача тривиальная, спарсенные данные залить в свою базу, всё.
-
У меня такая ситуация:
чтобы в реальном времени запускать в работу аккаунты у которых прошло уникальное время с определённого момента, я сделал на MySQL базу с тремя таблицами. Рабочий скрипт (постер) отправляет запрос на получение акка в таблицу T1. Этот скрипт запущен в многопоте. Далее есть второй скрипт - "менеджер аккаунтов". Он работает в один поток и выполняет такую последовательность: читает из таблицы T1 одну запись, удаляет её, потом по нужному условию (прошло ли нужное время) находит подходящий аккаунт в таблице T2, меняет там время, чтобы в следующий раз акк не попался снова и записывает этот акк в таблицу T3. Это занимает у него обычно 10 секунд. Тем временем первый скрипт "постер" в цикле проверяет таблицу T3 и, когда находит акк, предназначеный ему, то забирает и удаляет запись. (Бас работает с бд так, как в этой теме показано.)Внимание, вопрос знатокам: Как сократить время работы скрипта "менеджер аккаунтов" в 5-10 раз? :)
Потому-что он просто не успевает раздавать акки и создает простой ресурсов (память и проц не забиты).
Он специально запущен в один поток, чтобы не допускать конфликтов записи-чтении аккаунтов.
Но я даже провел эксперимент - разбил акки на три базы с такой же структурой и запустил к каждой базе по копии менеджера и постера. Но вместо трех потоков по 10 сек на акк, я получил три потока по 1 минуте на акк. Попробовал в два потока - 30-40 сек. Что можете посоветовать?
-
В общем, отказался от этой затеи и перенес все в глобальный список и синхронно с ним работаю. Не совсем то, что хотел, но зато суперскорость.