ошибка интерфейса mysqldb

#python #mysql #mysql-python

#python #mysql #mysql-python

Вопрос:

У меня очень странная проблема с mysqldb (модулем mysql для python).

У меня есть файл с запросами для вставки записей в таблицы. Если я вызываю функции из файла, это работает просто отлично; но при попытке вызвать одну из функций из другого файла это выдает мне

_mysql_exception.Ошибка интерфейса: (0, «)

Я действительно не понимаю, что я здесь делаю неправильно..

Я вызываю функцию из buildDB.py :

 import create

create.newFormat("HD", 0,0,0)
  

Функция newFormat(..) находится в create.py (импортировано) :

 from Database import Database

db = Database()

def newFormat(name, width=0, height=0, fps=0):
    format_query = "INSERT INTO Format (form_name, form_width, form_height, form_fps)  VALUES ('" name "'," str(width) "," str(height) "," str(fps) ");"
    db.execute(format_query)
  

И база данных класса следующая :

импортируйте MySQLdb из MySQLdb.константы импортируют FIELD_TYPE

 class Database():
    def __init__(self):
        server = "localhost"
        login = "seq"
        password = "seqmanager"
        database = "Sequence"
        my_conv = { FIELD_TYPE.LONG: int }

        self.conn = MySQLdb.connection(host=server, user=login, passwd=password, db=database, conv=my_conv)
        # self.cursor = self.conn.cursor()

    def close(self):
        self.conn.close()

    def execute(self, query):
        self.conn.query(query)
  

(Я ввел только соответствующий код)

Обратная трассировка :

 Z:sequenceManagermysql>python buildDB.py
D:ProgramFilesPython26libsite-packagesMySQLdb__init__.py:34: DeprecationWa
rning: the sets module is deprecated
  from sets import ImmutableSet
INSERT INTO Format (form_name, form_width, form_height, form_fps) VALUES ('HD',0
,0,0);
Traceback (most recent call last):
  File "buildDB.py", line 182, in <module>
    create.newFormat("HD")
  File "Z:sequenceManagermysqlcreate.py", line 52, in newFormat
    db.execute(format_query)
  File "Z:sequenceManagermysqlDatabase.py", line 19, in execute
    self.conn.query(query)
_mysql_exceptions.InterfaceError: (0, '')
  

Предупреждение никогда раньше не было проблемой, поэтому я не думаю, что это связано.

Комментарии:

1. Можете ли вы предоставить код, в котором вызывается запрос?

2. Добавлена обратная трассировка, она не говорит намного больше ..

Ответ №1:

Я получил эту ошибку, когда пытался использовать закрытое соединение.

Комментарии:

1. Это включает в себя, было ли соединение внутренне закрыто, а не только если вы вызывали close() соединение

Ответ №2:

Проблема решена.. Я дважды инициализировал базу данных.. Извините, если вы потеряли время, читая это!

Комментарии:

1. Вы все еще используете метод запроса ? Я думаю, что это не допускает подстановки параметров. Это большой риск для безопасности из-за возможности атак с использованием SQL-инъекций. Если есть какой-либо пользовательский ввод, он всегда должен сначала экранироваться модулем db.

Ответ №3:

Я не смог заставить вашу настройку работать. I постоянно выдает мне одну и ту же ошибку. Однако способ подключения к базе данных и выполнения запросов к ней с помощью запроса кажется «нестандартным». С этой настройкой мне повезло больше:

 conn = MySQLdb.Connection(user="user", passwd="******", 
                          db="somedb", host="localhost")
cur = conn.cursor()
cur.execute("insert into Format values (%s,%s,%s,%s);", ("hd",0,0,0))
  

Таким образом, вы можете воспользоваться экранированием ввода модулей БД, что является обязательным для предотвращения атак с использованием sql-инъекций.

Комментарии:

1. Я пытался использовать курсор, но он выдает мне ошибку «Ошибка атрибута: курсор», и я не понимаю, почему. Вот почему я его не использую.. Может быть, вы могли бы помочь мне с этим?

2. Да, способ использования пакета MySQLdb является «нестандартным» (говорится в документации). Когда вы используете MySQLdb.Connection (с большой буквы C), вы получаете объект connection, который имеет метод cursor .