сам скрипт, ругается на строку 62
Структура работы и БД MS SQL сервера:
- Необходимо выполнить вставку в таблицу data_log, например, insert
into dbo.data_log (tname,sparam,date1) values
('fill_OVDP_emps','45',getdate()), где ' fill_OVDP_emps' -
константа, а 45 - код филиала (узла) , getdate() -
текущая дата
- В результате автоматически обновляется таблица OVDP_ROLE.employees
работниками узла Администрация на текущую дату
- По завершению заполнения таблицы OVDP_ROLE.employees заполняются
поля comment_get и date_get таблицы data_log
Структура БД:
- № Наименование поля Тип Описание
- 1 Auto_Card Int Уник. ключ в пределах филиала - физическое лицо
- 2 Pid Int Уник. ключ в пределах филиала - работник
- 3 Num_Tab Varchar(8) Таб. №
- 4 Full_Name Varchar(122) ФИО
- 5 SocNumber_Encrypted Varbinary(128) Зашифрованный СНИЛС (хеш MD5)
- 6 Name_appoint Varchar(351) Наименование должности
- 7 short_name Varchar(100) Филиал
- 8 Struct_name Varchar(255) Подразделение
- 9 Treepath Varchar(1024) Подразделение (Развернутое наименование)
- 10 REP_BRANCH_NUM Int Ссылка на код узла
пример SocNumber_Encrypted : "_\x00\xf7\x13E\xf7\@\t\x06\r<\x98\xa2\x02\xe5"
структура django models.py:
class Filial(models.Model):
name=models.CharField(_('Filial Name'), max_length=255)
boss_code=models.PositiveIntegerField(_('boss code'))
class Employee(models.Model):
fio=models.CharField(_('fio'), max_length=250)
struct_name_short=models.TextField(_('struct name short'), blank=True)
struct_name_long=models.TextField(_('struct name long'), blank=True)
unique_md5=models.TextField(_('hash md5'))
position=models.TextField(_('Doljnost`'))
sacking=models.BooleanField(_('yvolen'), blank=True)
filial=models.ForeignKey(Filial, verbose_name=_('Filial'))
tab_number=models.PositiveIntegerField(_('tab number'))
сам скрипт
-- coding: utf-8 --
from datetime import datetime
import time
import pyodbc
from django.conf import settings
from stest.models import Employee, Filial
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = 'replication'
def handle(self, *args, **options):
log = open("repl.log", "a")
string = '##################'+str(datetime.now())+'##################\n'
log.write(string)
fil_list = ['45', '21', '32', '24', '3', '11', '40',
'18', '4', '10', '35', '15', '25', '12',
'13', '36', '2', '19', '7', '14', '53',
'38', '42', '44', '43', '39']
try:
cnxn = pyodbc.connect('Driver={SQL Server};Server=BOSSKV;PORT=1433;Database=exch;Trusted_connection=yes')
except:
log.write("connect failed\n")
else:
log.write("connect successful\n")
cursor = cnxn.cursor()
for fil in fil_list:
cursor.execute("insert into data_log (tname, sparam, date1) values (?, ?, ?)", 'fill_OVDP_emps', str(fil), datetime.now())
cnxn.commit()
cursor.execute("select * from data_log where tname like 'fill_OVDP_emps'")
while 1:
cursor.execute("select * from data_log where tname like 'fill_OVDP_emps'")
rows = cursor.fetchall()
last = rows[-1]
if last.date_get:
break
else:
time.sleep(25)
message = 'filial #'+str(fil)+'s added successful\n'
log.write(message)
cursor.execute("select * from OVDP_ROLE.employees")
rows = cursor.fetchall()
updated_employees = 0
created_employees = 0
for row in rows:
filial = Filial.objects.get_or_create(boss_code=row.REP_BRANCH_NUM,
defaults={'name':row.short_name.decode('cp1251').encode('utf8')}
)
datadict = {'fio': row.Full_Name.decode('cp1251').encode('utf8'),
'struct_name_short': row.Struct_Name.decode('cp1251').encode('utf8'),
'struct_name_long': row.treepath.decode('cp1251').encode('utf8'),
'unique_md5': row.SocNumber_Encrypted,
'position': row.Name_appoint.decode('cp1251').encode('utf8'),
'sacking': False,
'filial': filial,
'tab_number': row.Num_Tab,
}
employee, created = Employee.objects.update_or_create(
unique_md5=row.SocNumber_Encrypted, defaults=datadict
)
if created:
created_employees += 1
else:
updated_employees += 1
log.write("Employees updated:%s\n", updated_employees)
log.write("Employees created:%s\n", created_employees)
cnxn.close()
Updated 21 Sept. 2016, 15:13 by Origin.