Inserir dados num banco de dados

690 views
Skip to first unread message

Ghandy Rhodan

unread,
Aug 5, 2013, 4:48:52 PM8/5/13
to python...@googlegroups.com
Prezados amigos,

Estou aprendendo Python e eu meu filho chegamos na parte de BANCO DE DADOS,
tenho que inserir dados a um tabela, mas tentamos varias formas diferentes e não conseguimos.

Gostaria de pedir ajuda e uma possível explicação:

Criamos o programa abaixo e não conseguimos inserir o resultado no DB.

SEMPRE APARECE A MSG DE ERRO:

Traceback (most recent call last):
  File "Seisdb.py", line 18, in <module>
cur.execute(sql)
sqlite3.OperationalError: no such column: x

--------------------------------------------------------------------------------------------------------------

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')

sql = "CREATE TABLE Sena(x NUMERIC, y NUMERIC, z NUMERIC)"

# Para inserir dados no nosso banco de dados usamos
x = 1
while x < 6:
      y = 1
      while y < 6:
          z = 1
          while z < 6:
              cur = conn.cursor()
              sql = "INSERT INTO Sena VALUES(x,y,z)"
              cur.executable(sql)
              z = z + 1
      y = y + 1
x = x + 1

# A linha seguinte é usada para consolidar os dados na base
connection.commit()

# fim do programa
------------------------------------------------------------------------------------------------------

Linux - Junior Polegato

unread,
Aug 5, 2013, 4:56:27 PM8/5/13
to python...@googlegroups.com
Em 05-08-2013 17:48, Ghandy Rhodan escreveu:
> Prezados amigos,
> Estou aprendendo Python e eu meu filho chegamos na parte de BANCO DE
> DADOS,
> tenho que inserir dados a um tabela, mas tentamos varias formas
> diferentes e n�o conseguimos.
> Gostaria de pedir ajuda e uma poss�vel explica��o:
> Criamos o programa abaixo e n�o conseguimos inserir o resultado no DB.
> SEMPRE APARECE A MSG DE ERRO:
> Traceback (most recent call last):
> File "Seisdb.py", line 18, in <module>
> cur.execute(sql)
> sqlite3.OperationalError: no such column: x
>
> [...]
> sql = "INSERT INTO Sena VALUES(x,y,z)"
> cur.executable(sql)

Ol�!

Bom, se procurar no Google por "python sqlite insert" vai
encontrar exemplo de monte assim:

sql = "INSERT INTO Sena VALUES(?,?,?)"
dados = (x, y, z)
cur.executable(sql, dados)

[]'s
Junior Polegato

Linux - Junior Polegato

unread,
Aug 5, 2013, 5:02:00 PM8/5/13
to python...@googlegroups.com
Em 05-08-2013 17:56, Linux - Junior Polegato escreveu:
> Em 05-08-2013 17:48, Ghandy Rhodan escreveu:
>> Prezados amigos,
>> Estou aprendendo Python e eu meu filho chegamos na parte de BANCO DE
>> DADOS,
>> tenho que inserir dados a um tabela, mas tentamos varias formas
>> diferentes e n�o conseguimos.
>> Gostaria de pedir ajuda e uma poss�vel explica��o:
>> Criamos o programa abaixo e n�o conseguimos inserir o resultado no DB.
>> SEMPRE APARECE A MSG DE ERRO:
>> Traceback (most recent call last):
>> File "Seisdb.py", line 18, in <module>
>> cur.execute(sql)
>> sqlite3.OperationalError: no such column: x
>>
>> [...]
>> sql = "INSERT INTO Sena VALUES(x,y,z)"
>> cur.executable(sql)
> Bom, se procurar no Google por "python sqlite insert" vai
> encontrar exemplo de monte assim:
> sql = "INSERT INTO Sena VALUES(?,?,?)"
> dados = (x, y, z)
> cur.executable(sql, dados)

Ol�!

Ainda d� para fazer assim:

dados = [[range(1, 6) for y in range(1,6)] for x in range(1, 6)]
sql = "INSERT INTO Sena VALUES(?,?,?)"
cur.executemany(sql, dados)

[]'s
Junior Polegato



--

[]'s

Junior Polegato

Silvio Giunge Silva

unread,
Aug 5, 2013, 11:27:31 PM8/5/13
to python...@googlegroups.com
Além desses exemplos do Junior,
duas maneiras que funcionaram pra mim

http://pastebin.com/412m3gBD

http://pastebin.com/ZL1mFXzk

esse segundo exemplo usando subprocess em um sistema BSD

> Date: Mon, 5 Aug 2013 18:02:00 -0300
> From: li...@juniorpolegato.com.br
> To: python...@googlegroups.com
> Subject: Re: [python-brasil] Inserir dados num banco de dados

>
> Em 05-08-2013 17:56, Linux - Junior Polegato escreveu:
> > Em 05-08-2013 17:48, Ghandy Rhodan escreveu:
> >> Prezados amigos,
> >> Estou aprendendo Python e eu meu filho chegamos na parte de BANCO DE
> >> DADOS,
> >> tenho que inserir dados a um tabela, mas tentamos varias formas
> >> diferentes e não conseguimos.
> >> Gostaria de pedir ajuda e uma possível explicação:
> >> Criamos o programa abaixo e não conseguimos inserir o resultado no DB.

> >> SEMPRE APARECE A MSG DE ERRO:
> >> Traceback (most recent call last):
> >> File "Seisdb.py", line 18, in <module>
> >> cur.execute(sql)
> >> sqlite3.OperationalError: no such column: x
> >>
> >> [...]
> >> sql = "INSERT INTO Sena VALUES(x,y,z)"
> >> cur.executable(sql)
> > Bom, se procurar no Google por "python sqlite insert" vai
> > encontrar exemplo de monte assim:
> > sql = "INSERT INTO Sena VALUES(?,?,?)"
> > dados = (x, y, z)
> > cur.executable(sql, dados)
>
> Olá!
>
> Ainda dá para fazer assim:

>
> dados = [[range(1, 6) for y in range(1,6)] for x in range(1, 6)]
> sql = "INSERT INTO Sena VALUES(?,?,?)"
> cur.executemany(sql, dados)
>
> []'s
> Junior Polegato
>
>
>
> --
>
> []'s
>
> Junior Polegato
>
> --
> --
> ------------------------------------
> 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-brasi...@googlegroups.com
>
> ---
> Você está recebendo esta mensagem porque se inscreveu no grupo "python-brasil" dos Grupos do Google.
> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
> Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
>
>

Silvio Giunge Silva

unread,
Aug 5, 2013, 11:51:07 PM8/5/13
to python...@googlegroups.com
agora que eu vi que vocês estão usando sqlite, mas fica ai os exemplos pro MySQL
=/


From: alvo...@live.com
To: python...@googlegroups.com
Subject: RE: [python-brasil] Inserir dados num banco de dados
Date: Tue, 6 Aug 2013 06:27:31 +0300

Linux - Junior Polegato

unread,
Aug 6, 2013, 4:13:05 AM8/6/13
to python...@googlegroups.com

Olá!

Não se deve utilizar %s, veja que se por exemplo tiver um apóstrofo na string vai falhar quando não deveria, se a variável for numérica, vai falhar também a menos que conversa para string antes, ou seja, qualquer objeto não string ou string com apóstrofo vai te dar dor de cabeça.

[]'s
        Junior Polegato

Augusto Nascimento

unread,
Aug 7, 2013, 10:31:43 AM8/7/13
to python...@googlegroups.com
Tente assim:

sql = "INSERT INTO Sena VALUES (%d,%d,%d)" %(x, y, z)



Pedro Werneck

unread,
Aug 9, 2013, 1:32:29 PM8/9/13
to python...@googlegroups.com
Hein?

Posso não ter entendido o que você quis dizer, mas usar um %s implica
em str() no objeto sendo passado, assim como %r implica em um repr().
Não há problema algum em utilizar %s com objetos que não sejam string,
ou string com apóstrofo.

>>> s = 'hello %s'

Funciona com string:

>>> s % 'world'
'hello world'

Com inteiro:
>>> s % 123
'hello 123'

Com string com apóstrofo

>>> s % "world's people"
"hello world's people"

E até mesmo com qualquer objeto arbitrário, que vai implicar em um repr():

>>> s % object()
'hello <object object at 0x7f4a57f41080>'

Ou o __str__, caso implemente:

>>> class Lero(object):
... def __str__(self):
... return 'world'
...
>>> s % Lero()
'hello world'
>>>

Geralmente não se deve utilizar interpolação de strings diretamente
para construir queries porque isso torna o código mais vulnerável à
injeção de SQL, não por problemas com tipos de dados.


2013/8/6 Linux - Junior Polegato <li...@juniorpolegato.com.br>:
Pedro Werneck

Arthur Furlan

unread,
Aug 9, 2013, 1:55:53 PM8/9/13
to python...@googlegroups.com
2013/8/9 Pedro Werneck <pjwe...@gmail.com>:
> Hein?
>
> Posso não ter entendido o que você quis dizer, mas usar um %s implica
> em str() no objeto sendo passado, assim como %r implica em um repr().
> Não há problema algum em utilizar %s com objetos que não sejam string,
> ou string com apóstrofo.
>
>>>> s = 'hello %s'
[...]
> Com string com apóstrofo
>
>>>> s % "world's people"
> "hello world's people"

Acho que ele se referiu ao fato da string com apóstrofo quebrar a sintaxe SQL.


-- Arthur Furlan

Pedro Werneck

unread,
Aug 9, 2013, 2:05:55 PM8/9/13
to python...@googlegroups.com
Pode ser, mas isso independe do método usado para interpolar.

2013/8/9 Arthur Furlan <afu...@afurlan.org>:

Silvio Giunge Silva

unread,
Aug 9, 2013, 2:18:19 PM8/9/13
to python...@googlegroups.com
na verdade realmente da problema Pedro,
eu uso para inserir urls no banco de dados, por isso uso dessa forma, sei que não vai dar problemas.

veja um exemplo

>>> insert=conn.cursor()
>>> item = ['192.168.8.28','http://www.pokemon.com',"psyduck-'psyaiaiai'",384,4825]
>>> insert.execute("insert into ntable (ip, url_str, username, elapsed_ms, size_bytes) values (\'%s\', \'%s\', \'%s\', %s, %s)" % (item[1],item[2],item[6],item[8],item[9]))

mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'psyaiaiai'', 384, 4825)' at line 1

PS: Não, eu não assisto mais pokemon, mas imito o psyduck ;)

> From: pjwe...@gmail.com
> Date: Fri, 9 Aug 2013 15:05:55 -0300
> Subject: Re: [python-brasil] Inserir dados num banco de dados

Silvio Giunge Silva

unread,
Aug 9, 2013, 2:26:26 PM8/9/13
to python...@googlegroups.com
corrigindo o que eu copiei e colei, eu editei para usar os items certos mas copiei e colei a linha do meu git 
o.O


Subject: RE: [python-brasil] Inserir dados num banco de dados
Date: Fri, 9 Aug 2013 21:18:19 +0300

Silvio Giunge Silva

unread,
Aug 9, 2013, 2:27:19 PM8/9/13
to python...@googlegroups.com
corrigindo o que eu copiei e colei, eu editei para usar os items certos mas copiei e colei a linha do meu git 
o.O

>>> insert.execute("insert into ntable (ip, url_str, username, elapsed_ms, size_bytes) values (\'%s\', \'%s\', %s, %s, %s)" % (item[0],item[1],item[2],item[3],item[4]))

PS: Desculpem os erros...


From: alvo...@live.com
To: python...@googlegroups.com
Subject: RE: [python-brasil] Inserir dados num banco de dados
Date: Fri, 9 Aug 2013 21:26:26 +0300

Linux - Junior Polegato

unread,
Aug 9, 2013, 2:57:02 PM8/9/13
to python...@googlegroups.com
Em 09-08-2013 14:55, Arthur Furlan escreveu:
> 2013/8/9 Pedro Werneck<pjwe...@gmail.com>:
>> Posso n�o ter entendido o que voc� quis dizer, mas usar um %s implica
>> em str() no objeto sendo passado, assim como %r implica em um repr().
>> N�o h� problema algum em utilizar %s com objetos que n�o sejam string,
>> ou string com ap�strofo.
>> [...]"hello world's people"
> Acho que ele se referiu ao fato da string com ap�strofo quebrar a sintaxe SQL.

Ol�!

� isso mesmo, string com ap�strofo quebra a sintaxe do SQL, com
n�mero acho que n�o teria problema usar %s. Outro agravante � com data,
onde se a data apresentada pelo __str__ do Python n�o for condizente com
a esperada na sintaxe do SQL vai dar problema. Outro agravante � que
":nnn" no Oracle � considerado um par�metro do comando "execute" e
pode-se esquecer de colocar %s entre ap�strofos e tamb�m problemas com None.

Exemplo com Oracle:

�� import cx_Oracle as oracle
�� conexao = oracle.connect(usuario, senha, 'localhost')
�� cursor = conexao.cursor()

�� s = "World's people"
�� cursor.execute("create table teste_string(texto varchar2(4000))")
�� cursor.execute("insert into teste_string values (:0)", [s])
�� cursor.execute("insert into teste_string values ('%s')" % s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cx_Oracle.DatabaseError: ORA-01756: string entre aspas n�o finalizada
adequadamente

�� import datetime
�� agora = datetime.datetime.now()
�� print "%s" % agora
2013-08-09 15:52:45.518396
�� cursor.execute("create table teste_data(data date)")
�� cursor.execute("insert into teste_data values (:0)", [agora])
�� cursor.execute("insert into teste_data values ('%s')" % agora)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cx_Oracle.DatabaseError: ORA-01861: o literal n�o corresponde � string
de formato

�� cursor.execute("insert into teste_data values (:0)", [None])
�� cursor.execute("insert into teste_data values ('%s')" % None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cx_Oracle.DatabaseError: ORA-01858: foi localizado um caractere
n�o-num�rico onde se esperava um num�rico



--

[]'s

Junior Polegato

Pedro Werneck

unread,
Aug 9, 2013, 3:27:02 PM8/9/13
to python...@googlegroups.com
Silvio e Junior,

Sim, dá problema porque não fez escaping das aspas, não porque está
usando %s. Se fizer escape das aspas, não há problema nenhum em usar
%s, apesar de ainda não ser recomendado por razões de segurança.

Se ao invés de fazer a interpolação na mão, passar os parametros para
a chamada do connector, ele faz o escape e interpolação corretamente,
e já tem alguma proteção a SQL injection.



2013/8/9 Linux - Junior Polegato <li...@juniorpolegato.com.br>:
> Em 09-08-2013 14:55, Arthur Furlan escreveu:
>>
>> 2013/8/9 Pedro Werneck<pjwe...@gmail.com>:
>>>
>>> Posso não ter entendido o que você quis dizer, mas usar um %s implica
>>> em str() no objeto sendo passado, assim como %r implica em um repr().
>>> Não há problema algum em utilizar %s com objetos que não sejam string,
>>> ou string com apóstrofo.
>>> [...]"hello world's people"
>>
>> Acho que ele se referiu ao fato da string com apóstrofo quebrar a sintaxe
>> SQL.
>
>
> Olá!
>
> É isso mesmo, string com apóstrofo quebra a sintaxe do SQL, com
> número acho que não teria problema usar %s. Outro agravante é com data, onde
> se a data apresentada pelo __str__ do Python não for condizente com a
> esperada na sintaxe do SQL vai dar problema. Outro agravante é que ":nnn" no
> Oracle é considerado um parâmetro do comando "execute" e pode-se esquecer de
> colocar %s entre apóstrofos e também problemas com None.
>
> Exemplo com Oracle:
>
> »» import cx_Oracle as oracle
> »» conexao = oracle.connect(usuario, senha, 'localhost')
> »» cursor = conexao.cursor()
>
> »» s = "World's people"
> »» cursor.execute("create table teste_string(texto varchar2(4000))")
> »» cursor.execute("insert into teste_string values (:0)", [s])
> »» cursor.execute("insert into teste_string values ('%s')" % s)
>
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> cx_Oracle.DatabaseError: ORA-01756: string entre aspas não finalizada
> adequadamente
>
> »» import datetime
> »» agora = datetime.datetime.now()
> »» print "%s" % agora
> 2013-08-09 15:52:45.518396
> »» cursor.execute("create table teste_data(data date)")
> »» cursor.execute("insert into teste_data values (:0)", [agora])
> »» cursor.execute("insert into teste_data values ('%s')" % agora)
>
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> cx_Oracle.DatabaseError: ORA-01861: o literal não corresponde à string de
> formato
>
> »» cursor.execute("insert into teste_data values (:0)", [None])
> »» cursor.execute("insert into teste_data values ('%s')" % None)
>
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> cx_Oracle.DatabaseError: ORA-01858: foi localizado um caractere não-numérico
> onde se esperava um numérico
>
>
>
> --
>
> []'s
>
> Junior Polegato
>
>
> --
> --
> ------------------------------------
> 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-brasi...@googlegroups.com
>
> --- Você está recebendo esta mensagem porque se inscreveu no grupo
> "python-brasil" dos Grupos do Google.
> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie
> um e-mail para python-brasi...@googlegroups.com.
> Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
>
>



--
---
Pedro Werneck

Linux - Junior Polegato

unread,
Aug 9, 2013, 3:42:17 PM8/9/13
to python...@googlegroups.com
Em 09-08-2013 16:27, Pedro Werneck escreveu:
> Silvio e Junior,
> Sim, d� problema porque n�o fez escaping das aspas, n�o porque est�
> usando %s. Se fizer escape das aspas, n�o h� problema nenhum em usar
> %s, apesar de ainda n�o ser recomendado por raz�es de seguran�a.
> Se ao inv�s de fazer a interpola��o na m�o, passar os parametros para
> a chamada do connector, ele faz o escape e interpola��o corretamente,
> e j� tem alguma prote��o a SQL injection.

Certo, mas foi isso que eu quis dizer, contudo quando eu disse que "vai
falhar" eu quis dizer implicitamente "vai falhar a sintaxe SQL", visto o
contexto em que est� inserido, na frase:

N�o se deve utilizar %s, veja que se por exemplo tiver um ap�strofo na
string vai falhar [a sintaxe SQL] quando n�o deveria, se a vari�vel for
num�rica, vai falhar [a sintaxe SQL] tamb�m a menos que conversa para
string antes, ou seja, qualquer objeto n�o string ou string com
ap�strofo vai te dar dor de cabe�a [se n�o fizer escaping para SQL].

Complementando, quando eu digo que a forma num�rica vai falar, � que
pode acontecer de seu banco de dados estar esperando v�rgula como
separador decimal e voc� passar ponto, veja no Oracle:

�� cursor.execute("create table teste_num(numero numeric)")
�� cursor.execute("insert into teste_num values ('%s')" % 123)
�� cursor.execute("insert into teste_num values ('%s')" % 123.456)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cx_Oracle.DatabaseError: ORA-01722: n�mero inv�lido

Ou seja, tudo o que eu disse foi em rela��o � sintaxe do SQL, que foi o
contexto da coloca��o, e outras coisas dependem do banco de dados, por
isso eu disse veementemente que n�o se deve utilizar %s.

--

[]'s

Junior Polegato

Pedro Werneck

unread,
Aug 9, 2013, 3:57:05 PM8/9/13
to python...@googlegroups.com
Junior,


Novamente, vai falhar porque a string foi inserida sem fazer escaping,
não porque está usando %s. Sim, você está certo que está errado, mas
ao não explicar corretamente porque está errado você está passando a
idéia de que usar %s com um valor que não seja string é errado, o que
não é verdade.

Se fizer escape corretamente, o %s gera sintaxe válida sem problema
algum. Por exemplo

cursor.execute("select * from restaurant where name = '%s'" %
conn.escape_string("Mc Donald's"))

Obviamente, a interpolação feita pelo conector já faz o escape de
forma semelhante.

Não se deve usar %s, mas não porque vai dar problema com apóstrofo ou
valor numérico, e sim porque usar %s torna o código mais vulnerável a
SQL injection. Qualquer método possível de interpolação que não faça
escape vai dar problemas.

Se é isso que você queria dizer, não foi claro o suficiente.



2013/8/9 Linux - Junior Polegato <li...@juniorpolegato.com.br>:
> Em 09-08-2013 16:27, Pedro Werneck escreveu:
>
>> Silvio e Junior,
>> Sim, dá problema porque não fez escaping das aspas, não porque está
>> usando %s. Se fizer escape das aspas, não há problema nenhum em usar
>> %s, apesar de ainda não ser recomendado por razões de segurança.
>> Se ao invés de fazer a interpolação na mão, passar os parametros para
>> a chamada do connector, ele faz o escape e interpolação corretamente,
>> e já tem alguma proteção a SQL injection.
>
>
> Certo, mas foi isso que eu quis dizer, contudo quando eu disse que "vai
> falhar" eu quis dizer implicitamente "vai falhar a sintaxe SQL", visto o
> contexto em que está inserido, na frase:
>
> Não se deve utilizar %s, veja que se por exemplo tiver um apóstrofo na
> string vai falhar [a sintaxe SQL] quando não deveria, se a variável for
> numérica, vai falhar [a sintaxe SQL] também a menos que conversa para string
> antes, ou seja, qualquer objeto não string ou string com apóstrofo vai te
> dar dor de cabeça [se não fizer escaping para SQL].
>
> Complementando, quando eu digo que a forma numérica vai falar, é que pode
> acontecer de seu banco de dados estar esperando vírgula como separador
> decimal e você passar ponto, veja no Oracle:
>
> »» cursor.execute("create table teste_num(numero numeric)")
> »» cursor.execute("insert into teste_num values ('%s')" % 123)
> »» cursor.execute("insert into teste_num values ('%s')" % 123.456)
>
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> cx_Oracle.DatabaseError: ORA-01722: número inválido
>
> Ou seja, tudo o que eu disse foi em relação à sintaxe do SQL, que foi o
> contexto da colocação, e outras coisas dependem do banco de dados, por isso
> eu disse veementemente que não se deve utilizar %s.
>
>
> --
>
> []'s
>
> Junior Polegato
>

Silvio Giunge Silva

unread,
Aug 9, 2013, 4:16:43 PM8/9/13
to python...@googlegroups.com
eu consigo enviar escapando o apóstrofo no meu objeto de envio,
por exemplo

>>> item = ["192.168.8.28","http://www.pokemon.com","psyduck-\\'psyaiaiai\\'",384,4825]
>>> insert.execute("insert into ntable (ip, url_str, username, elapsed_ms, size_bytes) values (\'%s\', \'%s\', '%s', %s, %s)" % (item[0],item[1],str(item[2]),item[3],item[4]))


*************************** 1. row ***************************
 id: 58441
 time_date: 2013-08-09 20:09:28
 elapsed_ms: 384
 size_bytes: 4825
  ip: 192.168.8.28
  username: psyduck-'psyaiaiai'

visto que estou usando a lib mysql.connector
talvez importando a MySQLdb dê certo usando o scape_string()

Estou na empresa agora mas vou ver quando chegar em casa da faculdade

> From: pjwe...@gmail.com
> Date: Fri, 9 Aug 2013 16:57:05 -0300
> Subject: Re: [python-brasil] Inserir dados num banco de dados

Alex

unread,
Aug 14, 2013, 11:30:42 PM8/14/13
to python...@googlegroups.com
import sqlite3

// CRIA O BANDO DE DADOS  - CORRETO

conn
= sqlite3.connect('test.db')

// DECLARA A TABELA MAS ONDE ELA É CRIADA ? OU QUANDO ?

sql
= "CREATE TABLE Sena(x NUMERIC, y NUMERIC, z NUMERIC)"

// --------------------------------------------------------------


# Para inserir dados no nosso banco de dados usamos
x
= 1
while x < 6:
      y
= 1
     
while y < 6:
          z
= 1
         
while z < 6:
              cur
= conn.cursor()

             
// INSERE DADOS NUMA TABELA QUA NÃO EXISTE ?

              sql
= "INSERT INTO Sena VALUES(x,y,z)"

             
             
// OLHA O 'SQL' SENDO REESCRITO ACIMA
             
// ------------------------------------------------------------------

              cur
.executable(sql)
              z
= z + 1
      y
= y + 1
x = x + 1

// NÃO HÁ  COLUNA  PORQUE NÃO HÁ TABELA
// sqlite3.OperationalError: no such column: x

A tabela do bando de dado nunca foi criada, como vai existir coluna 'x'.

Alex

unread,
Aug 14, 2013, 11:38:15 PM8/14/13
to python...@googlegroups.com
import sqlite3

# CRIA O BANCO DE DADOS OU ABRE SE JÁ EXISTIR
conn = sqlite3.connect('example.db')

# CRIA UM CURSOR
c = conn.cursor()

# CRIA A TABELA
c.execute('''CREATE TABLE stocks(date text, trans text, symbol text, qty real, price real)''')

# INSERE OS DADOS
c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")

# SAVA TODAS AS ALTERAÇÕES PENDENTES
conn.commit()

# FECHA O BANCO DE DADOS QUANDO NÃO MAIS NECESSÁRIO.
conn.close()
http://docs.python.org/2/library/sqlite3.html



Em segunda-feira, 5 de agosto de 2013 17h48min52s UTC-3, Ghandy Rhodan escreveu:

Alex

unread,
Aug 14, 2013, 11:55:51 PM8/14/13
to python...@googlegroups.com
import sqlite3

conn = sqlite3.connect('test.db')

cur = conn.cursor()
sql = "CREATE TABLE IF NOT EXISTS Sena(x NUMERIC, y NUMERIC, z NUMERIC)"
cur.execute(sql)

# Para inserir dados no nosso banco de dados usamos
x = 1
while x < 6:
    y = 1
    while y < 6:
        z = 1
        while z < 6:
            sql = "INSERT INTO Sena(x,y,z) values(?,?,?)" # ? placeholder
            cur.execute(sql, (x,y,z))
            z = z + 1
        y = y + 1
    x = x + 1

# A linha seguinte é usada para consolidar os dados na base
conn.commit()
conn.close
# fim do programa

Agora eu entendi o real problema. O código acima é funcional.


Em segunda-feira, 5 de agosto de 2013 17h48min52s UTC-3, Ghandy Rhodan escreveu:

Ghandy Rhodan

unread,
Aug 19, 2013, 7:44:49 AM8/19/13
to python...@googlegroups.com
Prezados amigos,

Muito obrigado a todos que de uma forma ou de outra tentaram ajudar,
e principalmente ao Alex, que descobriu como fazer a inserção, e reformulação do
meu programa basico. 

Muito obrigado
Reply all
Reply to author
Forward
0 new messages