В этой статье мы напишем скрипт с функцией добавления тарифа в базу данных. Pythonix из тарифов будет получать данные о скорости и создавать в устройствах Mikrotik Routerboard (Mikrotik RouterBoard 1200, Mikrotik RouterBoard 433AH, Mikrotik RouterBoard 750G) правила шейпера для пользователей.
Скрипт:
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import MySQLdb
import mysql_db, os, sys, time
def f_new_tarif():
print "\033[33m ---------------------\033[0m"
print "\033[33m| Добавить новый тариф |\033[0m"
print "\033[33m ---------------------\033[0m"
time.sleep(1)
os.system('clear')
while True:
name_tarif = raw_input("Введите название тарифа: ")
if not name_tarif:
print "\033[31m| Вы не ввели название тарифа |\033[0m"
time.sleep(1)
else:
break
while True:
price_tarif = raw_input("Введите стоимость тарифа: ")
if not price_tarif:
print "\033[31m| Вы не ввели стоимость тарифа |\033[0m"
time.sleep(1)
else:
break
while True:
speed_tarif = raw_input("Введите скорость для тарифа: ")
if not speed_tarif:
print "\033[31m| Вы не ввели скорость для тарифа |\033[0m"
time.sleep(1)
else:
break
cur = mysql_db.db.cursor()
sql = "SELECT id FROM tarifs WHERE name_tarif = '%s'" % (name_tarif)
res = cur.execute(sql)
cur.close()
r = int(res)
if r > 0:
print "Это название уже существует"
else:
print "Тариф добавлен"
cur = mysql_db.db.cursor()
sql = ("INSERT INTO tarifs (name_tarif, price_tarif, speed_tarif) VALUES ('%s', '%s', '%s')" % (name_tarif, price_tarif, speed_tarif))
cur.execute(sql)
cur.close()
if raw_input("Добавить новый тариф? y/n: ")!="y":
return()
else:
f_new_tarif()
Разбираем скрипт:
Подключаем необходимые модули:
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import MySQLdb
import mysql_db, os, sys, time
Создаем функцию с именем f_new_tarif:
def f_new_tarif():
Выводим сообщение "Добавить новый тариф":
print "\033[33m ---------------------\033[0m"
print "\033[33m| Добавить новый тариф |\033[0m"
print "\033[33m ---------------------\033[0m"
time.sleep(1)
Выполняем очистку экрана:
os.system('clear')
Запускаем цикл, в котором администратору будет предложено ввести название тарифа, например, unlim_10. Данные, введенные администратором, будут добавлены в переменную name_tarif с помощью функции raw_input. Если администратор не ввел название тарифа, выведется сообщение "Вы не ввели название тарифа", и администратору будет предложено сделать это еще раз.
while True:
name_tarif = raw_input("Введите название тарифа: ")
if not name_tarif:
print "\033[31m| Вы не ввели название тарифа |\033[0m"
time.sleep(1)
else:
break
Это действие имеет схожесть с предыдущим. Создается переменная price_tarif, в которую будут занесены данные, введенные администратором. Это значение ежемесячно будет вычитаться из баланса пользователя.
while True:
price_tarif = raw_input("Введите стоимость тарифа: ")
if not price_tarif:
print "\033[31m| Вы не ввели стоимость тарифа |\033[0m"
time.sleep(1)
else:
break
Следующее действие также похожее. В нем создается переменная speed_tarif, в которую будут занесены данные о скорости, предоставляемой пользователям для данного тарифа.
while True:
speed_tarif = raw_input("Введите скорость для тарифа: ")
if not speed_tarif:
print "\033[31m| Вы не ввели скорость для тарифа |\033[0m"
time.sleep(1)
else:
break
Извлекаем из базы данные, где в поле name_tarif есть запись с введенным названием тарифа. Результат заносим в переменную r:
cur = mysql_db.db.cursor()
sql = "SELECT id FROM tarifs WHERE name_tarif = '%s'" % (name_tarif)
res = cur.execute(sql)
cur.close()
r = int(res)
Скрипт:
Выполняем проверку: если переменная r больше нуля, значит в базе уже существует похожее имя, и выводится соответствующее сообщение. Если похожего названия не существует, то будет выполнено добавление данных в базу.
if r > 0:
print "Это название уже существует"
else:
print "Тариф добавлен"
cur = mysql_db.db.cursor()
sql = ("INSERT INTO tarifs (name_tarif, price_tarif, speed_tarif) VALUES ('%s', '%s', '%s')" % (name_tarif, price_tarif, speed_tarif))
cur.execute(sql)
cur.close()
Это действие предложит добавить еще один тариф. Если администратор не согласен, то функция закончит свою работу, если нажмет y то будет вызвана функция f_new_tarif()
if raw_input("Добавить новый тариф? y/n: ")!="y":
return()
else:
f_new_tarif()
Евгений Рудченко специально для ASP24.
