Как работать с sqlite? (Решено с помощью встроенной в BAS базы данных)



  • Подскажите, как работать с sqlite.
    Или альтернативное легкое решение. Есть строки login;pass;status. Мне нужно брать строку с определёнными значениями в столбце status и в процессе работы скрипта обновлять это значение. Текстовый файл не подходит, потому-что в случае ошибок можно строки потерять. А если не забирать строку из файла на время работы, то другие потоки будут повторно строки брать, которые уже в работе. Нужно, чтобы скрипт работал постоянно, раз в несколько минут проверяя статусы строк и забирая в работу те, у которых значение подходит под условие.



  • @Antonio said in Как работать с sqlite?:

    Подскажите, как работать с sqlite.
    Или альтернативное легкое решение. Есть строки login;pass;status. Мне нужно брать строку с определёнными значениями в столбце status и в процессе работы скрипта обновлять это значение. Текстовый файл не подходит, потому-что в случае ошибок можно строки потерять. А если не забирать строку из файла на время работы, то другие потоки будут повторно строки брать, которые уже в работе. Нужно, чтобы скрипт работал постоянно, раз в несколько минут проверяя статусы строк и забирая в работу те, у которых значение подходит под условие.

    В басе есть встроенная поддержка базы данных mongodb, вот туториал https://wiki.bablosoft.com/doku.php?id=ru:tutorial3 как создать базу и делать выборки.



  • Да, я её попробовал сначала - были какие-то глюки с импортом. Отображался только первый столбец и только в него импорт шел. После нескольких перезапусков и реимпортов данные нормально вошли. Странно, надеюсь при работе с этой базой не будет таких глюков и данные не потеряются.



  • Опять глюки какие-то. Вот создал базу, добавил колонки.
    alt text

    А в менеджере данных вот такая картина:
    alt text



  • @Antonio после редактирования схемы базы нужно перезагрузить бас



  • @DrPrime я уже раз 20 перезапустил. При том, что перезапустить просит не после каждого изменения. Вот ещё раз перезапустил - картина не поменялась.



  • @Antonio даже не знаю. У меня отрабатывает без проблем. У вас на скрини не выбрана таблица в менеджере данных, посмотрите в эту сторону



  • @DrPrime п.с. если нету описания колонок, то в таблице они не будут отображаться, будут отображатбся только данные



  • @DrPrime а там не выбирается ничего



  • @Antonio попробуйте добавить описания к таблице и колонкам



  • @DrPrime благодарю! Сработало!
    Получается, что в менеджере данных для обозначения столбцов и таблиц не их имена используются, а описания. Если их не заполнить, то ни чего не видно. Плюс чтобы программа попросила перезапуск нужно не только в окне редактирования схемы "Сохранить" нажать, но и в главном окне работы с базами.



  • Столкнулся с новыми вопросами.
    Я хотел отказаться от списков и ресурсов в пользу запросов к базе, чтобы в реальном времени менять и получать статус каждого аккаунта. Но изменить запись в базе запросом можно только зная id записи. Не понятно где его взять. Написано "Ид записи. Оставьте поле пустым, чтобы обновить последнюю запись, полученную как ресурс".

    Ок, тогда попробовал брать через "парсить строку" вот так: {{accs_base|notreuse|onlyfail}}. В настройках ресурса поставил:
    alt text

    Запускаю в многопотоке. Одни и те же аккаунты начинают забираться в несколько потоков одновременно. И так начинают гоняться несколько акков (первые в алфавитном порядке). И тут я вообще не понимаю. С одной стороны, раз они берутся заново, что даже по списку не успевают продвинутся дальше буквы "а", значит, что данные из базы перезагружаются и они актуальны? Но с другой стороны я при каждом взятии аккаунта записываю в ячейку время и при следующем взятии время проверяется и акк не идет дальше, если прошло не достаточно. А у меня они именно подряд в несколько потоков начинают браться в работу, как буд-то проходят проверку по времени. Понятно было бы, если бы база не успела обновится и данные о времени старые, но база явно обновляется, ведь постоянно берутся только первые аккаунты, начинающиеся с буквы "а". В чем тут дело?



  • @Antonio Работать с базой можно вообще не создавая ресурсы. Как ты и выразился, напрямую. ID записи ты можешь создать сам, просто отдельный столбик с INT значением.



  • @Fox , можно чуть подробнее? Нужно создать в таблице столбик с любым названием и описанием, выбрать тип данных int и положить туда рандомные уникальные числа? А если у меня в таблице несколько таких столбиков и числа в них пересекаются?

    И как потом получать по одной записи из базы? Я вижу только возможность взять в список.



  • @Antonio said in Как работать с sqlite? (Решено с помощью встроенной в BAS базы данных):

    Но изменить запись в базе запросом можно только зная id записи

    Когда подключаешь базу через ресурс то создаешь экшен - парсить строку, там в списке переменных нужно прописать последней переменную куда писать id.
    Например у тебя в базе колонки: LOGIN,PASS. Тогда в экшене Парсить строку ты прописываешь парсить в MYLOGIN,MYPASS,ID.

    А НЕ через ресурс у тебя не получится по очереди использовать записи.

    @Antonio said in Как работать с sqlite? (Решено с помощью встроенной в BAS базы данных):

    Запускаю в многопотоке. Одни и те же аккаунты начинают забираться в несколько потоков одновременно.

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

    У меня была похожая ситуация, я в колонку писал сколько еще раз можно использовать эту запись. Сначала мне помогла галочка перегружать периодически. Затем через время эта система сломалась, видимо я что-то поменял. В итоге все заработало уже с такими настройками



  • @Antonio Я сделал таблицу с нужными мне значениями, добавил столбик индекс, в котором вводил порядковый номер записи:
    0_1498568862174_forum30.png

    Затем в экшене получить записи использовал фильтр по колонке индекс
    0_1498569004054_forum31.png

    Но я преследовал иную цель, у меня каждый поток при подключении использовал последние три записи из базы. А саму базу пополнял другой скрипт.

    Как сказал @venom777 использовать по очереди записи проще будет через ресурс. Можно конечно привязать ID записи к номеру потока.. Всё зависит от необходимого результата.



  • Ну вот получается, что нужно с обновлять/перезагружать разобраться. Как я понимаю обновлять - это обновлять значения из ячеек базы данных, а иначе берутся те, которые при первом обращении там были. А перезагружать - это как раз сбрасывать счетчики с успешными, ошибочными и одновременными использованиями. Т.е. может быть мне нужно обновлять часто (например каждую секунду), а перезагружать не раньше, чем все акки обойдутся. Но это как-бы почти стирает грань между базой и списками (от раза к разу время прохода всего списка может быть очень разным, а тут его нужно жестко задавать).

    Если это так, то все равно остается вопрос. Обновлять и перезагружать стоит 30сек. Почему акки берутся повторно, но данные в них остаются старые? Ведь они проходят проверку, как при первом взятии.



  • @Antonio said in Как работать с sqlite? (Решено с помощью встроенной в BAS базы данных):

    Как я понимаю обновлять - это обновлять значения из ячеек базы данных, а иначе берутся те, которые при первом обращении там были. А перезагружать - это как раз сбрасывать счетчики с успешными, ошибочными и одновременными использованиями.

    Да я так делал, и мне первый раз хватило всего лишь установки галки перезагружать периодически.



  • @Antonio если поставишь в настройках ресурса одновременных использований - 1 , то одновременно с одной записью сможет работать только один поток. Перезагрузку ресурса меньше чем в минуту ставить не стоит, потому что скрипт будет междленнее работать, во время перезагрузки все потоки приостанавливаются, и ждут пока ресурс перезагрузится


Log in to reply