Jump to content
MacgyverPT

[Dúvida] MySQL queries no python

Recommended Posts

MacgyverPT

Boas pessoal.

Ando aqui há já algum tempo a tentar decifrar a coisa, mas não tem sido fácil.
Então é o seguinte: preciso enviar dados do arduino para uma base de dados em MySQL (coisa que está resolvido), mas no python precisava de fazer 2 consultas à base de dados antes de inserir os dados na mesma. Ou seja o processo é o seguinte: a pessoa tem um cartão com RFID, passa no leitor, o arduino lê e envia a informação da tag via serial port. Por sua vez, no python, eu preciso que, ao obter essa tag (para confirmar, eu consigo obter e fazer o print à tag lida pelo serial port) vá à base de dados obter o nome do user correspondente, depois é que regista na mesma base de dados, a junção das informações data/hora+nomeUtilizador+tag.

Deixo o link do código que tenho feito: https://pastebin.com/jqcQy8PD (os dados de username e password da db são de teste)

# -*- coding: utf-8 -*-
import serial
import mysql.connector
 
SERIALPORT = "/dev/tty.wchusbserial410" #serial port on mac
SERIALRATE = 9600
 
ser = serial.Serial(SERIALPORT, SERIALRATE)
conn = mysql.connector.connect(host='localhost', database='dbTeste', user='root', password='root')
if conn.is_connected():
    print('Connected to MySQL database')
 
cursor = conn.cursor()
print ("connection OK, cursor OK")
 
while 1:
    serial_line = ser.readline()
    if(serial_line != "GO_BLINK"):
        IDCardReadLine = ser.readline()
        print(IDCardReadLine) #del this line - only show the tag ID
       
        sqlSearchCardID = "SELECT idUser, nameUser, userCardID, isActive FROM Users WHERE userCardID LIKE = %s" %(IDCardReadLine)
        sqlSearchName = "SELECT nameUser FROM Users WHERE userCardID LIKE = %s" %(IDCardReadLine)
 
        if(sqlSearchCardID != '' and sqlSearchName != ''):
            sqlQueryInsertData = "INSERT INTO Records (idRecord, recordData, recordDateTime, userCardID) VALUES (NULL, 'Registo ok por: %s', CURRENT_TIMESTAMP, '%s')" %(IDCardReadLine, IDCardReadLine)
            cursor.execute(sqlQueryInsertData)
            conn.commit()
        else:
            print "Error"
           
    ser.flush()
 
 
cursor.close()
ser.close()
conn.close();

Fico a aguardar qualquer tipo de ajuda/dica/etc

 

Cumprimentos.

Share this post


Link to post
Share on other sites
M6

Tu não estás a executar as queries, estás apenas a definir strings com comandos SQL.

Tens de executar as queries para saber o resultado. Já agora, não uses LIKE, usa = e se os campos forem string tens de colocar entre '.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
MacgyverPT

Boas.

@M6 então como faço?

Já algum tempo que ando de roda disto e não descalço esta bota. Se calhar até é básico mas eu não tou a ver como resolver

 

Share this post


Link to post
Share on other sites
MacgyverPT

Obrigado @M6, vou espreitar.

 

Uma dúvida que surgiu foi, nas pesquisas que fiz só podia fazer o "cursor.execute()" uma vez por script, é verdade?

Share this post


Link to post
Share on other sites
M6

Não. Podes executar o comando as vezes que entenderes. Poderás, no máximo, ter de fechar o cursor e abri-lo novamente para executar uma nova query, mas não me parece sequer que tal seja necessário.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
JPTeixeira

O @M6 já te esclareceu a dúvida, mas se ainda tiveres algum problema deixo-te aqui a minha contribuição:

 if(sqlSearchCardID != '' and sqlSearchName != ''):  ->  if(cursor.execute(sqlSearchCardID) != '' and cursor.execute(sqlSearchName) != ''):

 

 

 

Edited by JPTeixeira

Share this post


Link to post
Share on other sites
MacgyverPT

Obrigado @M6 e @JPTeixeira. Vou dar uma checakada nisso.

 

Uma dúvida que surgiu foi, nas pesquisas que fiz só podia fazer o "cursor.execute()" uma vez por script, é verdade?

Share this post


Link to post
Share on other sites
JPTeixeira
8 minutos atrás, MacgyverPT disse:

Obrigado @M6 e @JPTeixeira. Vou dar uma checakada nisso.

 

Uma dúvida que surgiu foi, nas pesquisas que fiz só podia fazer o "cursor.execute()" uma vez por script, é verdade?

Não sei se isso foi algum erro ao postares ou não, mas o @M6 já te respondeu a isso lá em cima

 

3 horas atrás, M6 disse:

Não. Podes executar o comando as vezes que entenderes. Poderás, no máximo, ter de fechar o cursor e abri-lo novamente para executar uma nova query, mas não me parece sequer que tal seja necessário.

 

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.