반응형
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
반응형
'programing' 카테고리의 다른 글
강조 표시된 날짜 게시물이 먼저 정렬된 데이터베이스에서 뉴스 게시물 선택 (0) | 2022.12.29 |
---|---|
sudo 없이 mysql 서버에 연결 (0) | 2022.12.29 |
오류 UnicodeDecodeError: 'utf-8' 코덱이 0의 바이트 0xff를 디코딩할 수 없습니다. 잘못된 시작 바이트입니다. (0) | 2022.12.29 |
JavaScript 루프에 지연을 추가하려면 어떻게 해야 하나요? (0) | 2022.12.29 |
데이터가 현재 값보다 낮은 값을 갖는 데이터 선택 (0) | 2022.12.29 |