繁体   English   中英

无法使用python插入mysql数据库

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM