LINUX.ORG.RU
ФорумTalks

[2hdclnr] python script


0

0

По просьбе hdclnr. Опять же упомяну, что я с пайтаном только знакомлюсь!! Вот скриптик, который тупо лезет в БД биллинга UTM5, хватает от туда всех должников, у кого задолженность привышает позволенный кредит и кто не числится в удаленных. Затем составляет простейшее подобие таблички и всу эту мутатень пересылает на указанные адреса.

Смысл создания скрипта опишу в 2х пунктах: 1. Тренируюсь писать хоть что-то на питоне 2. чесслово надо.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import _mysql, sys, smtplib
from email.MIMEText import MIMEText

smtp_server = '10.0.0.66'
smtp_port = '25'
mail_subj = 'billing'
mail_from = 'user1@domain'
mail_to = ('user2@domain',
           'user3@domain',
           'user4@domain')

mail_user = 'user@domain'
mail_passwd = 'PASSWORD'
host,user,passwd,dbname = '10.0.0.3','root','DBPASSWORD','UTM5'
db=_mysql.connect(host,user,passwd,dbname)


db.query("""SELECT u.id,u.login,a.credit,FORMAT(a.balance,2) FROM users as u,accounts as a WHERE a.id=u.basic_account AND a.balance<0
                AND u.is_deleted=0 AND a.balance+a.credit<0;""")
r=db.store_result()
res = r.fetch_row(0)

text = 'ID\t|\tLogin\t\t|\tCredit\t|\tDolg\n'
line = '='*70
text = text + line + '\n'

# А вот здесь начинается мой дибилизм. Вместо того, чтобы все-таки найти и понять,
# как там сразу правильно отсылать на несколько адресов (через запятую не работает),
# я пихай все в бессмысленный цикл, из-за которого сами понимаете, что творится :)

for x in res:
        if len(x[1]) > 7:
                tab = '\t'
        else:
                tab = '\t\t'
        text = text + x[0] + '\t|\t' + x[1] + tab + '|\t' + x[2] + '\t|\t' + x[3] + '\n'
#print text - это было для отладки
msg = MIMEText(text, "", "cp1251")
msg['Subject'] = mail_subj
msg['From'] = mail_from

for se in mail_to:
        msg['To'] = se # masil_to

        s = smtplib.SMTP(smtp_server, smtp_port)
        s.starttls()
        s.login(mail_user,mail_passwd)
        s.sendmail(mail_from, se, msg.as_string())
        s.quit()
★★

зподно воочию попробую убедиться в полезности открытости :)

vitroot ★★
() автор топика

for x in res:
        if len(x[1]) > 7:
                tab = '\t'
        else:
                tab = '\t\t'
        text = text + x[0] + '\t|\t' + x[1] + tab + '|\t' + x[2] + '\t|\t' + x[3] + '\n'


YOU MADE MY DAY!!!

какой вывод, если пишешь "через запятую"?

hdclnr
()
Ответ на: комментарий от hdclnr

вопроса не очень понял, но вывод примерно следующий (только здесь все табы не отображаются как раз, как надо):

ID	|	Login		|	Credit	|	Dolg
======================================================================
12	|	6mnkmt		|	0	|	-39,457.21
16	|	ovv		|	0	|	-2,419.99
17	|	ip26xti6	|	0	|	-808.60
24	|	sk5aint7	|	0	|	-1,754.86
27	|	20edhj		|	0	|	-5,852.01
33	|	nfaxm		|	200	|	-7,981.88
41	|	school75	|	0	|	-0.00
55	|	school55	|	0	|	-0.00
59	|	liceum1		|	0	|	-3,253.12
64	|	school57	|	1000	|	-6,000.00
80	|	school49	|	0	|	-0.00
134	|	lw4td04x	|	200	|	-7,444.41
140	|	testuser	|	0	|	-10,936.50
155	|	bankvtb24	|	500	|	-962.81
157	|	progress	|	0	|	-34,788.39
160	|	kam		|	0	|	-585.02
163	|	komandak	|	0	|	-136.62
166	|	premer		|	200	|	-3,961.39
167	|	irksibaudit	|	0	|	-2,312.26
168	|	sibprom		|	500	|	-3,703.67
174	|	sherif		|	0	|	-4,528.01
178	|	poliklinika2	|	0	|	-30,220.20

Я вообще, типа правильнее все в список и циклом выводить что ли? :)

З.Ы. Да я любой критике рад, честно :) Учиться никогда не поздно, и все средства для этого хороши :)

vitroot ★★
() автор топика
Ответ на: комментарий от Davidov

Ну и, естественно, вместо \t нужно использовать пробелы.

Davidov ★★★★
()

вместо
_mysql

использовать
con = MySQLdb.Connection(db='UTM5',host='10.0.0.3',user='root',passwd='password')
cur = con.cur()
cur.execute()
cur.close()
con.commit()

это чтобы обсуждение подбодрить

dimon555 ★★★★★
()

>прИвышает

Grammar Nazzi в бешенстве лютуют...

Turbo_Mascal
()

Во-первых, не dolg, а credit (или что там у вас). Во-вторых, долг должен быть без минуса. Ну и выравнивать надо по значащим цифрам и точкам.

Igron ★★★★★
()
Ответ на: комментарий от Igron

не, здесь как раз правильнее "долг", ну даже скорее "баланс". Есть кредит, это цифра, на которую клиент может максимум уйти в минус без блокировки, после он становится должником.

vitroot ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.