Can';t使用python插入mysql数据库
我试图插入到我的数据库中,但什么都没有发生,没有错误,什么都没有 类别:Can';t使用python插入mysql数据库,python,mysql,python-2.7,Python,Mysql,Python 2.7,我试图插入到我的数据库中,但什么都没有发生,没有错误,什么都没有 类别: class Database: host = 'localhost' user = 'root' password = '' db = 'quinielas' def __init__(self): self.connection = MySQLdb.connect(self.host, self.user, self.password, self.db) self.connection.autocom
class Database:
host = 'localhost'
user = 'root'
password = ''
db = 'quinielas'
def __init__(self):
self.connection = MySQLdb.connect(self.host, self.user, self.password, self.db)
self.connection.autocommit(True)
self.cursor = self.connection.cursor()
def insert(self, query):
try:
self.cursor.execute(query)
self.connection.commit() #metodo para acceptar actualizaciones
except MySQLdb.Error:
self.connection.rollback() #metodo para descartar actualizaciones
def query(self, query):
cursor = self.connection.cursor( MySQLdb.cursors.DictCursor )
cursor.execute(query)
return cursor.fetchall()
def __del__(self):
self.connection.close()
查询:
db = Database()
query = "INSERT INTO jugadores (`name`, `r1`, `r2`, `r3`, `r4`," \
" `r5`, `r6`, `r7`, `r8`, `r9`)" \
" VALUES (%s, %d, %d, %d, %d, %d, %d, %d, %d, %d)"
db.insert(query .format(name, r1, r2, r3, r4, r5, r6, r7, r8, r9))
我将python 2.7与以下库一起使用:
首先,您需要在
的中输出一条消息,除了try/catch
之外,以查看MySQL异常。其次,字符串插值将%
运算符和.format()
方法合并在一起。%
运算符使用%s
(用于字符串)和%d
(用于数字),而.format
使用大括号,{}
作为任何类型的占位符。在构建连接字符串时,需要选择其中一个版本
但是,在SQL中,在将值传递到查询中时,两者都不应使用,因为您应该将它们绑定为参数。在大多数Python MySQL API中,占位符是%s
,不应与Python的%
运算符的字符串占位符混淆。例如,其他RDM使用?
占位符
考虑在定义的类Database中调整您的方法,以接收要在的第二个可选参数中使用的元组或参数列表。此外,将显示异常消息的正确字符串格式:
def insert(self, query, parameters):
try:
self.cursor.execute(query, parameters)
self.connection.commit() #metodo para acceptar actualizaciones
except MySQLdb.Error as e:
print('MySQL error is: {}'.format(e))
self.connection.rollback() #metodo para descartar actualizaciones
然后,调整调用以传递带有非字符串格式的准备语句的参数列表:
db = Database()
preparedstmt = "INSERT INTO jugadores (`name`, `r1`, `r2`, `r3`, `r4`," \
" `r5`, `r6`, `r7`, `r8`, `r9`)" \
" VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
params_tuple = (name, r1, r2, r3, r4, r5, r6, r7, r8, r9)
db.insert(preparedstmt, params_tuple)