Jump to content
Xixas

Erro que não percebo

Recommended Posts

Xixas

Olá tenho este código e não percebo porque esta a dar erro. Tenho tudo testado ate ao ultimo sql e penso que seja ai. mas nao tenho a certeza.

obrigada

nome = raw_input("Qual e o nome?")

sql = "select * from Customers where cname = '" + nome + "'"  

cursor = dbcn.cursor()
cursor.execute(sql)

nitems = int(cursor.rowcount)

if nitems != 0:
   row = cursor.fetchone()
   print "O nome", row[1], "já existe!\nO seu número de cliente é", row[0], "!"

else:
   print "Este nome de cliente não existe! Introduza os seguintes dados:"
   dNasc = raw_input("Qual e a data de nascimento?")
   cidade = raw_input("Qual e a cidade?")
   sql = "select * from Customers"
   cursor = dbcn.cursor()
   cursor.execute(sql2)
   numNovo = int(cursor.rowcount)+1
   sql2 = "insert into Customers \
           (CID, cname, birthyear, city) \
           VALUES (" + str(ntc) + ", '" + nome + "', " + str(dNasc) + ", " + str(cidade) + ")
   cursor2 = dbcn.cursor()
   cursor2.execute(sql2)
   dbcn.commit()

Edited by thoga31
Tags code + GeSHi

Share this post


Link to post
Share on other sites
thoga31

Antes sequer de eu ver o código, o sistema de coloração de código do fórum detectou o problema. Não te falta fechar umas aspas no final da definição da variável sql2?

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites
Greemax

Antes sequer de eu ver o código, o sistema de coloração de código do fórum detectou o problema. Não te falta fechar umas aspas no final da definição da variável sql2?

P@P Debuger :D

Share this post


Link to post
Share on other sites
Xixas

obrigada(ainda n percebo muito disto)

entretanto ja alterei mas continua a dar erro nisto

Traceback (most recent call last):
 File "U:\IBD\Trab5b).py", line 35, in <module>
   cursor2.execute(sql2)
 File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 195, in execute
   self.errorhandler(self, TypeError, m)
 File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
   raise errorclass, errorvalue
TypeError: must be string or read-only buffer, not tuple

>> novo codigo (excerto)

else:
   print "Este nome de cliente não existe! Introduza os seguintes dados:"
   dNasc = raw_input("Qual e a data de nascimento?")
   cidade = raw_input("Qual e a cidade?")
   sql = "select * from Customers"
   cursor = dbcn.cursor()
   cursor.execute(sql)
   numNovo = int(cursor.rowcount)+1
   sql2 = "INSERT INTO Customers VALUES (",numNovo,", '",nome,"', ",dNasc,", ",cidade,")"
   cursor2 = dbcn.cursor()
   cursor2.execute(sql2)
   dbcn.commit()

Edited by thoga31
Tags code + GeSHi

Share this post


Link to post
Share on other sites
pwseo

Traceback (most recent call last):
 File "U:\IBD\Trab5b).py", line 35, in <module>
   cursor2.execute(sql2)
 File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 195, in execute
   self.errorhandler(self, TypeError, m)
 ...
TypeError: must be string or read-only buffer, not tuple

O interpretador diz-te tudo o que precisas de saber: na linha 35 do teu ficheiro Trab5b).py há um erro, mais precisamente no argumento que passas à função execute(): o tipo de dados de sql2 deverá ser string e não um tuplo.

Relativamente aos tuplos, a documentação diz-nos o seguinte:

Tuples are constructed by the comma operator (not within square brackets), with or without enclosing parentheses (...)

E vejamos agora como definiste sql2:

sql2 = "INSERT INTO Customers VALUES (",numNovo,", '",nome,"', ",dNasc,", ",cidade,")"

Parece-me claro que sql2 encaixa na regra que mencionei e é de facto um tuplo, pois pegaste em meia dúzia de strings e utilizaste a vírgula entre elas sem parêntesis rectos ou curvos.

Para resolveres o teu problema, deverás concatenar as strings correctamente:

sql2 = "INSERT INTO Customers VALUES (" + numNovo + ", '" + nome + "', " + dNasc + ", " + cidade + ")"

ou então, utilizando a format():

sql2 = "INSERT INTO Customers VALUES ({}, '{}', {}, {})".format(numNovo, nome, dNasc, cidade)

Edited by pwseo
  • Vote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.