programing

Python MySql 삽입이 작동하지 않음

procenter 2022. 12. 29. 21:45
반응형

Python MySql 삽입이 작동하지 않음

Python MySQL API를 사용하여 Python 프로그램에서 Mysql 데이터베이스에 접속하고 있습니다.며칠 전부터 문제가 생겼어요.데이터베이스에 레코드를 삽입할 수 없어 원인을 알 수 없습니다.데이터베이스에 레코드를 연결하고 삽입하는 방법은 다음과 같습니다.

db = MySQLdb.connect("localhost","root","padmaramulu","pdfsearch" )
cursor = db.cursor()
#cursor.execute("""CREATE TABLE IF NOT EXISTS documents (docid INT NOT NULL ,PRIMARY KEY(docid),docname CHAR(30)) engine=innodb""")
temp = "hello";number = 2;
cursor.execute( 'insert into documents(docid,docname) values("%d","%s")' % (number,temp) )
db.close()

그것은 왜 그럴까?

연결을 닫기 전에 다음을 추가해야 합니다.db.commit().

MySQL에서 InnoDB 엔진을 사용하고 있다면,

db.commit() 

그렇지 않으면 MySQL 엔진을 MyISAM으로 변경할 필요가 없습니다.

누군가 같은 문제를 겪었을 수도 있고 도움이 될 수도 있고

임의의 2가지 옵션:

a. MySqldb를 사용하는 사용자:

db.commit() 

b. Mysql Connector를 사용하는 사용자:

cnx.commit()

db 또는 Mysql 커넥터를 닫기 전에 다음 코드를 추가하십시오.

a. 샘플 : (Azure)

import mysql.connector
from mysql.connector import errorcode

# Obtain connection string information from the portal
config = {
  'host':'<mydemoserver>.mysql.database.azure.com',
  'user':'<myadmin>@<mydemoserver>',
  'password':'<mypassword>',
  'database':'<mydatabase>',
  'client_flags': [ClientFlag.SSL],
  'ssl_cert': '/var/wwww/html/DigiCertGlobalRootG2.crt.pem'
}

# Construct connection string
try:
   conn = mysql.connector.connect(**config)
   print("Connection established")
except mysql.connector.Error as err:
  if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
    print("Something is wrong with the user name or password")
  elif err.errno == errorcode.ER_BAD_DB_ERROR:
    print("Database does not exist")
  else:
    print(err)
else:
  cursor = conn.cursor()

  # Drop previous table of same name if one exists
  cursor.execute("DROP TABLE IF EXISTS inventory;")
  print("Finished dropping table (if existed).")

  # Create table
  cursor.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
  print("Finished creating table.")

  # Insert some data into table
  cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("banana", 150))
  print("Inserted",cursor.rowcount,"row(s) of data.")
  cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("orange", 154))
  print("Inserted",cursor.rowcount,"row(s) of data.")
  cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("apple", 100))
  print("Inserted",cursor.rowcount,"row(s) of data.")

  # Cleanup
  conn.commit()
  cursor.close()
  conn.close()
  print("Done.")

b. 샘플 : (Dev Mysql)

from __future__ import print_function
from datetime import date, datetime, timedelta
import mysql.connector

cnx = mysql.connector.connect(user='scott', database='employees')
cursor = cnx.cursor()

tomorrow = datetime.now().date() + timedelta(days=1)

add_employee = ("INSERT INTO employees "
               "(first_name, last_name, hire_date, gender, birth_date) "
               "VALUES (%s, %s, %s, %s, %s)")
add_salary = ("INSERT INTO salaries "
              "(emp_no, salary, from_date, to_date) "
              "VALUES (%(emp_no)s, %(salary)s, %(from_date)s, %(to_date)s)")

data_employee = ('Geert', 'Vanderkelen', tomorrow, 'M', date(1977, 6, 14))

# Insert new employee
cursor.execute(add_employee, data_employee)
emp_no = cursor.lastrowid

# Insert salary information
data_salary = {
  'emp_no': emp_no,
  'salary': 50000,
  'from_date': tomorrow,
  'to_date': date(9999, 1, 1),
}
cursor.execute(add_salary, data_salary)

# Make sure data is committed to the database
cnx.commit()

cursor.close()
cnx.close()

당신의 코드를 고쳐야 한다고 생각합니다.

cursor.execute( 'insert into documents(docid,docname) values(%d, %s)', (number,temp) )

그런 다음 추가하세요.db.commit()데이터베이스 연결을 닫기 전에.

다음과 같이 python을 설정하여 데이터베이스의 변경을 자동 커밋할 수 있습니다.

db = MySQLdb.connect("localhost","root","padmaramulu","pdfsearch, autocommit=True")```

언급URL : https://stackoverflow.com/questions/6027271/python-mysql-insert-not-working

반응형