[英]Can't insert to mysql db with python
我正在尝试插入数据库,但是什么也没有发生,没有错误,没有。
类:
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: https : //pypi.python.org/pypi/MySQL-python/1.2.5#downloads
首先,您需要在try/catch
except
中输出一条消息,以查看MySQL异常。 其次,您的字符串插值是将%
运算符和.format()
方法混合在一起。 %
运算符对所有类型的占位符使用%s
(对于字符串)和%d
(对于数字),而.format
使用大括号{}
。 在构建串联字符串时,您需要选择任一版本。
但是,在SQL中,在将值传递到查询中时不应使用任何方法,因为应将它们绑定为参数。 在大多数Python-MySQL API中,占位符是%s
,不应与Python的%
运算符的字符串占位符混淆。 例如,其他RDMS使用?
占位符。
考虑调整定义的类Database中的方法 ,以接收要在cursor.execute(operation, params=None, multi=False)
第二个可选参数中使用的元组或参数列表。 此外,将为异常消息显示正确的字符串格式:
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
然后,调整该调用以传递带有非字符串格式的prepared语句的参数列表:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.