Problemas ao tentar inserir com SQLAlchemy

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Problemas ao tentar inserir com SQLAlchemy

fredsilva
This post has NOT been accepted by the mailing list yet.
Boa tarde,
estou trabalhando numa aplicação aqui no serviço, onde eu preciso ler arquivos em um diretório e gravar o conteúdo das linhas no banco de dados.
O arquivo contém linhas mais ou menos da forma abaixo:
AAAAA|120|20121108|20121108
00000|00089109420510001|01071231301548920|00042081739161509023|20121108112203
01000|01071231301549640|258,77|0,00|0,00|258,77|20121120|20121120|258,77
01500|201101|2749,30
01501|201101|2749,30
01502|201101|0,00
01500|201102|4176,15
01501|201102|4176,15
01502|201102|0,00
......continua

Como vcs podem ver a linha que inicia com 01500 se repete, e é justamente nela que dá o problema. As linhas 00000 e 01000 grava normal, pois elas não se repetem, mas a linha 01500 só insere a primeira, na próxima dá o erro:
state.session_id, self.hash_key))
sqlalchemy.exc.InvalidRequestError: Object '<Pgdasd_01500 at 0x32bd070>' is already attached to session '3' (this is '4')

Eu acredito que tá dando este problema porque estou tentando gravar o mesmo objeto novamente, mas não estou sabendo como proceder. Alguém pode me dar um força?
Segue o código:
def importFile(self, url):  
        fileImport = open(url, 'r')
        lines = fileImport.readlines()
        fileImport.close()                
        pgdasd = Pgdasd()                
        banco = Banco()                              
        i = 0                      
        while i < len(lines):                                    
                        line = lines[i].replace("\n","").replace(",",".").split("|") # ler a linha do arquivo, retira os \n e troca , por .                
            if line[0] == '00000':                
                pgdasd = pgdasd.setPgdasd_00000(line)#Coloca os valores da linha no objeto                    
                                banco.insere(pgdasd)
            if line[0] == '01000':
                pgdasd.Pgdasd_01000 = pgdasd.Pgdasd_01000.setPgdasd_01000(line) #Coloca os valores da linha no objeto                    
                                banco.insere(pgdasd.Pgdasd_01000)
            if line[0] == '01500':
                pgdasd.Pgdasd_01500 = pgdasd.Pgdasd_01500.setPgdasd_01500(line) #Coloca os valores da linha no objeto                      
                banco.insereLista(lista_01500)
                       
                        i = i + 1
                       
class Banco():
   
    def insere(self, pgdasd):
        engine = create_engine('oracle://ssss:ddddd@xxxx')            
        Session = sessionmaker(bind=engine)
        session = Session()
        session.add(pgdasd)
        session.commit()