alissong 1 Report post Posted August 15, 2008 Pessoal, Estou tentando aprender python. A versão instalada é 2.5 windows + apache 2.0.63 + php 5.2.3. Então fiz essa consulta no mysql, porém queria digitar o código no input e exibe o produto. Veja código: #!/usr/bin/python import MySQLdb codigo = int(raw_input('Digite o código do produto: ')) # Conecta db = MySQLdb.connect(host="localhost", user="xxxx", passwd="xxxx", db="xxxxxx") # Cria um cursor cursor = db.cursor() # Executa o SQL cursor.execute("SELECT * FROM produto WHERE cod_produto = %s") numrows = int(cursor.rowcount) # Lista uma linha de cada vez for x in range(0,numrows): row = cursor.fetchone() print row[0], "-->", row[1] Portanto, quando clico F5 pede o código e depois exibe esse erro: Traceback (most recent call last): File "C:\Python25\curso\mysql", line 9, in <module> cursor.execute("SELECT * FROM produto WHERE cod_produto = %s") File "C:\Python25\Lib\site-packages\MySQLdb\cursors.py", line 166, in execute self.errorhandler(self, exc, value) File "C:\Python25\Lib\site-packages\MySQLdb\connections.py", line 35, in defaulterrorhandler raise errorclass, errorvalue ProgrammingError: (1064, "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 '%s' at line 1") Como faço para acertar isso. Um abraço. Alissong Share this post Link to post Share on other sites
_Isis_ 202 Report post Posted August 16, 2008 cursor.execute("SELECT * FROM produto WHERE cod_produto = %s") cadê o parametro que vai entrar no %s? To perform a query, you first need a cursor, and then you can execute queries on it: c=db.cursor() max_price=5 c.execute("""SELECT spam, eggs, sausage FROM breakfast WHERE price < %s""", (max_price,)) In this example, max_price=5 Why, then, use %s in the string? Because MySQLdb will convert it to a SQL literal value, which is the string '5'. When it's finished, the query will actually say, "...WHERE price < 5". Why the tuple? Because the DB API requires you to pass in any parameters as a sequence. Due to the design of the parser, (max_price) is interpreted as using algebraic grouping and simply as max_price and not a tuple. Adding a comma, i.e. (max_price,) forces it to make a tuple. Share this post Link to post Share on other sites
alissong 1 Report post Posted August 16, 2008 Import Java.Isis, Não entendi nada, o que você falou. Por que estou començando nessa linguagem agora. A minha idéia era digitar o número no input para montar a claúsula where.... Pode-me explicar melhor o que é parâmetro em python. Um abraço. Alissong Share this post Link to post Share on other sites
alissong 1 Report post Posted August 19, 2008 Depois de muita busca no google. A resposta é essa: cursor.execute("SELECT * FROM produto WHERE cod_produto = %s", (codigo)) Um abraço. Alissong Share this post Link to post Share on other sites