Gravar resultado de SQL em arquivo TXT

1,188 views
Skip to first unread message

Guilherme Dorow

unread,
Oct 5, 2017, 5:14:51 AM10/5/17
to Python Brasil
Olá,

Estou com uma necessidade e não conheço muito do Python o que tem dificultado um pouco o meu trabalho. E até o momento eu diria que tenho peças de um quebra cabeça que faltam ser encaixadas.

Preciso automatizar a criação de um arquivo txt que grave o retorno de um SQL de uma base firebird. 

O que tenho funcionando até o momento basicamente é a conexão com o banco de dados. O resto é "peça solta" que preciso encaixar.

# Importando o Driver de conexao do Firebird
import fdb
import os.path

# Conectando ao Firebird
con = fdb.connect(dsn='server:/pasta/base/base.GDB', user='usuario', password='senha')


O SQL eu até consegui imprimir na tela, mas somente a primeira linha e fiz da seguinte forma:

# Executando  SQL

cursor = con.cursor() # cria cursor

cursor.execute('SELECT NUMERO FROM CLIENTE') #consulta SQL

rs = cursor.fetchall()

print(rs[0])


Para criar um arquivo TXT usei os comando abaixo:

# Cria o arquivo Texto no diretorio do programa
arquivo = open ('teste.txt', 'w')

# Escreve no arquivo
arquivo.write ()


# Fecha o arquivo
arquivo.close()


Será que alguém consegue me orientar de como realizar essa consulta e gravar ela inteira dentro do TXT? Se possível antes de gravar a consulta ter como limpar o que já tem dentro do arquivo pois todo dia muda os dados dentro do mesmo.

Muito obrigado!

Luciano da Silva Martins

unread,
Oct 5, 2017, 7:33:37 AM10/5/17
to Python Brasil
se vc num conhece python pq quer usá-lo?

Guilherme Dorow

unread,
Oct 5, 2017, 8:44:26 AM10/5/17
to Python Brasil
Porque parece ser uma boa solução para minha necessidade.

Diego Nascimento

unread,
Oct 5, 2017, 9:33:25 AM10/5/17
to python...@googlegroups.com
Pode concatenar tua lista de sqls em uma string, com o separador '\n' (nova linha), pode fazer assim:

full_sql =  '\n'.join(rs)


e então escrever 'full_sql' no arquivo.

file = open(“testfile.txt”,”w”)

file.write(full_sql)
file.close()
-------------------------------------------------

ou pode escrever usando o 'for in'

file = open("testfile.txt", "w")
for sql in rs:
    file.write(sql + "\n")

file.close()

Em 5 de outubro de 2017 09:44, Guilherme Dorow <guilher...@live.com> escreveu:
Porque parece ser uma boa solução para minha necessidade.

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasil+unsubscribe@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Luciano da Silva Martins

unread,
Oct 5, 2017, 9:58:36 AM10/5/17
to Python Brasil
Desculpe guilherme a resposta grosseira mas pensava eu q para agilizar seu processo vc pudesse implementar sua solução numa linguagens q já dominasse, mas tb axo uma solução ótima ir de python, blz brow?


Em quinta-feira, 5 de outubro de 2017 06:14:51 UTC-3, Guilherme Dorow escreveu:

Diego Nascimento

unread,
Oct 5, 2017, 10:13:48 AM10/5/17
to python...@googlegroups.com
python é uma linguagem fácil, basta uma vasculhada na documentação, algumas googladas e você consegue programar o que deseja nessa linguagem, mesmo sem experiência nela.

--

Guilherme Dorow

unread,
Oct 19, 2017, 8:18:41 AM10/19/17
to Python Brasil
Sem problemas! Na verdade não sou desenvolvedor, trabalho com infra, a lógica da programação é até tranquilo mas possuo pouco conhecimento nas linguagens de modo geral, por isso resolvi perguntar. De qualquer maneira obrigado cara! Abraços

Guilherme Dorow

unread,
Oct 19, 2017, 10:01:42 AM10/19/17
to Python Brasil
Me ajudou muito!

Só o meu resultado está gravando assim no arquivo:
[('002',), ('001',), ('003',), ('007',), ('011',), ('010',), ('009',), ('006',), ('004',), ('008',), ('005',)]

eu queria gravar ele assim:
002
001
003
007
011...
 

Diego Nascimento

unread,
Oct 19, 2017, 10:54:45 AM10/19/17
to python...@googlegroups.com
tem que iterar a lista.. cola o teu código no gist https://gist.github.com/ e passa o link aqui.

--

Guilherme Dorow

unread,
Oct 19, 2017, 12:45:57 PM10/19/17
to Python Brasil
Primeiramente muito obrigado por toda a ajuda!

Segue o meu script até o momento..

OBS.: o SELECT que eu fiz nele é só um teste o que preciso mesmo é rodar um select maior, mas preferi começar com algo mais básico e evoluir.

O verdadeiro resultado do select que vou precisar gravar é esse abaixo:

SELECT DDD_CEL, NUMERO_CEL FROM
(
SELECT 

ENT.DDD_FAX AS DDD_CEL,
ENT.FAX AS NUMERO_CEL,
(((REC.VALOR2)-(REC.DESCONTO))-(REC.VALOR_PAGO)) AS SALDO


FROM RECEBER REC

INNER JOIN ClIENTE ENT ON (ENT.CODCLI = REC.CODCLI)

WHERE
REC.VALOR_PAGO >= '0' AND
REC.VALOR_PAGO < REC.VALOR2 AND
REC.STATUS <> ('ANTE') AND
REC.STATUS <> ('DESD') AND
REC.STATUS <> ('CANC') AND
REC.DT_VENCTO <= CURRENT_DATE -5 

)
WHERE SALDO <> '0'

GROUP BY
DDD_CEL,
NUMERO_CEL;

Obrigado!!

Diego Nascimento

unread,
Oct 19, 2017, 1:17:07 PM10/19/17
to python...@googlegroups.com
O result vc tem que imprimir assim:

for value in result:
    arquivo.write(value[0])

--

Guilherme Dorow

unread,
Oct 19, 2017, 1:24:24 PM10/19/17
to Python Brasil
Perfeito!!! Muito Obrigado!!!!


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages