Найти - Пользователи
Полная версия: скрипт для создания БД
Начало » Базы данных » скрипт для создания БД
1
fedjan
привет всем

у меня следующая проблема: у меня есть файл следующего содержания:
00K
01ADF_MED
02UPD
0320100915
0420100901
05ABDATA PHARMA-DATEN-SERVICE
06Adresse_FAM
071150
0812
00F
0101
02Key_ADF
031
040
05V
065
07NU1
00F
0102
02Kurzname
030
040
05V
0680
07AN1
00F
0103
02Land
030
040
05V
063
07AL1
00I
014603
02Taxor Cosmetic
03D
04Taxor Cosmetic GmbH
05
06Berlin
07
0812277
09
10Motzener Stra\s39e 6-8
11030/72099110
12030/720990
00I
015147
02Helvetic Medical
03CH
04Helvetic Medical Care GmbH
05
06Zug
07
086300
09
10Seestra\s39e 15
11
120041/789056090
00U
0113629
04Inresa Arzneimittel GmbH
00U
0113644
04Intercell-Pharma GmbH
00U
0113661
04Intersan GmbH
00U
0113670
04Interlatex GmbH
из него мне нужно создать таблицу, заполнить ее значениями и зделать Update
таких файлов много, структура у всех одна.

краткий смысл файла:
00К-таблица, под номером 01-ее название, 08- количество атрубутов етой таблицу
каждый 00F - ето атрибут и его параметры, ключ-не ключ, количество символов
каждый 00I - данные построково, при чем 1-е дбе цифры ето порядковые номера атрибутов
каждый 00U - ето Update в етой таблице, при чем актуализируютса не все атрибуты

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

помогите пожалуйста с советом или направте на путь решения!!

зарание спасибо

import re, psycopg2, sys

FREE_WHEEL = re.compile
TABLE_START = re.compile(r'00K')
CREATE_ATTR = re.compile(r'00F$')
FILL_ATTR = re.compile(r'00I$')
END = re.compile(r'00E$')
INPUT_R1 = re.compile(r'01(+)')
INPUT_R2 = re.compile(r'02(+)')
INPUT_R3 = re.compile(r'03(+)')
INPUT_R4 = re.compile(r'04(+)')
INPUT_R5 = re.compile(r'05(+)')
INPUT_R6 = re.compile(r'06*(+)')
INPUT_R8 = re.compile(r'08(+)')
INPUT_RNUM = re.compile(r'(*)')


'''class Attribute(object):
id=“”
name=“”
key=“”
fill=“”
typ=“”
length=“”

def __init__(self,id,name,key,fill,typ,length):
self.id=id
self.name=name
self.key=key
self.fill=fill
self.typ=typ
self.length=length'''


class Parse_for_Insert(object):

table_name = “”
number_of_attr = 0
attribut_id =
attribut_name =
is_key =
be_NULL =
attribut_typ =
field_length =
data_list =
p_keys =
# print (table_name +“ ”+ attribut+“ ”+ data)
sqlBuffer= “”
def __init__(self):

self.state = ‘Start’
print self.state

self.f = dict({
‘Start’:[,,,],
‘K-Zustand’:[],
‘TABLE_NAME’:[,],
‘FULL_NAME’:[,],
‘NUMBER_of_ATTR’:[,],
‘F-Zustand’:[],
‘ATTR_ID’:[],
‘ATTR_NAME’:[],
‘PRIM_KEY’:[],
‘FILL_NESS’:[],
‘FIELD_TYP’:[],
‘FIELD_LENGTH’:[,,],
‘I-Zustand’:[,,,],
‘End’:[,]
})


# list_a=

def handle_input(self,input):
typ_1 =

state,process = self.parseInput(input)
if(process != None):
process(input)

if state == ‘Error’:
print('Error!')
self.state=state

if process == get_table_name:
self.table_name = input
return self.table_name
elif process == get_number_of_attr:
self.number_of_attr = input
return self.number_of_attr
elif process == get_attr_ID:
self.attribut_id.append(input)
return self.attribut_id
elif process == get_attr_name:
self.attribut_name.append(input)
return self.attribut_name
elif process == get_prim_key:
if input == ‘1’:
self.is_key.append('1')
else:
self.is_key.append('0')
return self.is_key
elif process == get_fill_ness:
if input == ‘0’:
self.be_NULL.append('NOT NULL')
else:
self.be_NULL.append(' ')
return self.be_NULL
elif process == get_field_typ:
if input == ‘U’ or input == ‘V’:
self.attribut_typ.append('varchar')
else:
self.attribut_typ.append('char')
return self.attribut_typ
elif process == get_field_length:
if input=='':
self.field_length.append('100')
else:
a=int(input)+2
self.field_length.append(a)
return self.field_length
elif process == feel_attributes:
self.data_list.append(input)
return self.data_list


def parseInput(self,input):
for tuple in self.f:
regexp = tuple
if regexp.match(input):
return (tuple,tuple)
expected =
for tuple in self.f:
expected.append(tuple.pattern)
print “In state ”+self.state+“: Expected one of”+str(expected)+“ but got ”+input
return ('Error',None)

def isFinished(self):
return self.state=='End' or self.state=='Error'



def get_table_name(input):
pass

def get_table_full_name(input):
pass

def get_number_of_attr(input):
pass

def get_attr_ID(input):
pass

def get_attr_name(input):
pass

def get_prim_key(input):
pass

def get_fill_ness(input):
pass

def get_field_typ(input):
pass

def get_field_length(input):
pass

def feel_attributes(input):
pass



from table_sample_sm import Parse_for_Insert
from table_sample_sm import Attribute
from test_1 import Parse_for_Update
import psycopg2
import sys, os
import string

def main():
pass
def quote(string):
return “'”+string.replace(“'”,“''”)+“'”

def replace_all(text, d):
for i, j in d.iteritems():
text = text.replace(i, j)
return text


if __name__ == ‘__main__’:

m = Parse_for_Insert()

for file in os.listdir('E:\\abdata\\abdamed\\TESTDATEN_ABDAMED\\kkk\\'):
print file
infile = open('E:\\abdata\\abdamed\\TESTDATEN_ABDAMED\\kkk\\'+file, ‘r’)


for line in infile:
# print line
m.handle_input(line.strip())
if m.isFinished():
print “Parsing finished.”
break

attribute_koplett = zip(m.attribut_id,m.attribut_name,m.is_key,m.be_NULL,m.attribut_typ,m.field_length)
#print zip(m.attribut_id,m.attribut_name)
print str(m.attribut_id)

attrib =''
for a in m.attribut_name:
attrib+=a+','

m.attribut_id =
m.attribut_name =
m.is_key =
m.be_NULL =
m.attribut_typ =
m.field_length =


ucode = {'\\':'', ‘A25’ : u'\xc4','a25' : u'\xe4', ‘O25’ : u'\xd6', ‘o25’ : u'\xf6',
‘U25’ : u'\xdc', ‘u25’ : u'\xfc', ‘s39’: u'\xDF'}

j = int(m.number_of_attr)
v = zip(**j)
#print v
m.data_list =


con = None

try:

con = psycopg2.connect(database='postgres', user='postgres')
cur = con.cursor()

attributes = ‘'
keys = ’'

for i in attribute_koplett:
attributes+i)+' '+str(i)+'('+str(i)+') '+str(i)+','
if str(i) == ‘1’:
keys+=str(i)+','

print ‘droping table: ’+ m.table_name
cur.execute('DROP TABLE IF EXISTS ‘+str(m.table_name) )
print ’creating table: ‘+ m.table_name
cur.execute(’CREATE TABLE IF NOT EXISTS ‘+str(m.table_name)+’('+attributes+'PRIMARY KEY ‘+’('+keys+')'+')')
for a in v:
aaa= “,”.join(quote(x) for x in a)
txt = replace_all(aaa,ucode)
cur.execute ('INSERT INTO ‘+str(m.table_name)+’('+str(attrib)+') values (' + txt + ‘)’)

con.commit()
except psycopg2.DatabaseError, e:
print ‘Error %s’ % e
sys.exit(1)


finally:

if con:
con.close()

infile.close()

fedjan
это вторая часть скрипта
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB