sourcetip

python 데이터베이스 요청이 업데이트되지 않음

fileupload 2023. 9. 15. 21:18
반응형

python 데이터베이스 요청이 업데이트되지 않음

시작할 때는 작동하지만 데이터베이스 내에서 값을 변경해도 업데이트되지 않는 파이썬 스크립트의 데이터베이스에서 데이터를 꺼냅니다.

스크립트는 처음에 데이터베이스에 연결된 다음 id가 1인 모든 컨텐츠를 선택합니다(이 컨텐츠에는 사용할 열의 개수가 있음).

그런 다음 글로벌 가변 차고를 업데이트합니다.차고 칼럼의 내용물을 가열하면 시동 시 0과 같다고 가정해 보겠습니다.

반면 루프는 시작 시 0이 되는 이 변수를 출력합니다.

데이터베이스 내의 열 차고를 10으로 변경하면 파이썬 스크립트는 0으로 유지됩니다.생각했던 글로벌 변수를 업데이트하지 않습니다.

나의 대본은 아래에 있습니다.

import mysql.connector as mariadb

mariadb_connection = mariadb.connect(
  host="localhost",
  user="garage",
  passwd="*******",
  database="mydb"
  )
cursor = mariadb_connection.cursor()

garageHeating = 0 

def readDbHeating():
   global garageHeating
   result = []
   try:
      cursor.execute ("SELECT * FROM heating WHERE id = '1'")
      for reading in cursor.fetchall():
         result.append (reading)
         garageHeating = result[0][8]
   except () as e:
      print (e)

while 1:
   readDbHeating()
   print garageHeating

함수 외부의 글로벌 변수를 표시하고 try 명령 내에 결과를 출력하기 위해 아래에 나와 있는 코드를 편집했습니다.데이터베이스에서 데이터를 처음 꺼낸 후에도 스크립트는 첫 번째 설정 데이터를 계속 표시하지만 데이터베이스 레코드를 변경하면 새 데이터로 업데이트되지 않습니다.

import mysql.connector as mariadb

mariadb_connection = mariadb.connect(
  host="localhost",
  user="garage",
  passwd="14Odiham",
  database="mydb"
  )
cursor = mariadb_connection.cursor()

global garageHeating

def readDbHeating():
   result = []
   try:
      cursor.execute ("SELECT * FROM heating WHERE id = '1'")
      for reading in cursor.fetchall():
         result.append (reading)
         garageHeating = result[0][8]
         print garageHeating
         print result
   except () as e:
      print (e)

while 1:
    readDbHeating()
    #print garageHeating

전화를 해야 합니다.MySQLdb.connections.Connection.commit쿼리 또는 집합을 실행하기 전에autocommit연결 개체에 저장됩니다.

쿼리 전 커밋 중

def readDbHeating():
   global garageHeating
   result = []
   try:
      # commit
      mariadb_connection.commit()
      cursor.execute ("SELECT * FROM heating WHERE id = '1'")
      for reading in cursor.fetchall():
         result.append (reading)
         garageHeating = result[0][8]
   except () as e:
      print (e)

연결을 만들 때 자동 커밋

mariadb_connection = mariadb.connect(
  host="localhost",
  user="garage",
  passwd="14Odiham",
  database="mydb",
  # Auto commit
  autocommit=True
  )

연결 생성 후 자동 커밋

mariadb_connection.autocommit(True)

잘 되는 것 같아요.아래와 같이 데이터베이스 연결을 연 다음 기능 내에서 연결을 닫아야 합니다.이것은 내가 mysql로 과거에 했던 것과 다르지만 적어도 지금은 작동합니다.

import mysql.connector as mariadb
import time

garageHeating = 0

def readDbHeating():
   mariadb_connection = mariadb.connect(
     host="localhost",
     user="garage",
     passwd="14Odiham",
     database="mydb"
     )
   cursor = mariadb_connection.cursor()
   result = []
   try:
      cursor.execute ("SELECT * FROM heating WHERE id = '1'")
      for reading in cursor.fetchall():
         result.append (reading)
   except () as e:
      print (e)
   finally:
    #closing database connection.
    if(mariadb_connection.is_connected()):
        mariadb_connection.close()
        print("connection is closed")
   return (result)


while 1:
   test = readDbHeating()
   print test
   time.sleep(1)

언급URL : https://stackoverflow.com/questions/56118851/python-database-request-not-updating

반응형