Ошибка системы: соединение было отключено - PullRequest
1 голос
/ 10 марта 2011

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

В настоящее время я создаю целую кучу операторов вставки для mysql, используя список разделенных запятыми значений, выделенных парантезами (т.е. insert into table (a, b, c) values (1,2,3),(4,5,6),(7,8,9);) I 'я создаю тысячу таких кортежей, соединяю их с помощью 'и' и вставляю их в одно утверждение.

проблема в том, что я получаю ошибку в вопросе.

У меня естьдаже прибегает к подключению к БД каждый раз, когда у меня появляется новый оператор вставки.Я могу предоставить код, если хотите, но он полностью замаскирован под оператором with.

Я не вижу причин для разрыва соединения с БД ....

редактировать: почему бы и нет.вот кодвнутри цикла for:

with SQLConnection(DATASOURCES[SCHEDULEDB]) as db:
    db.execute_sql( command + ' ' + ','.join(block) + ';' )

пара определений:

def execute_sql(self, query):
    if query.startswith('select'):
        return self.execute_read(query)
    else:
        return self.execute_other(query)

def execute_other(self,query):
    adapter = OdbcCommand(query,self.connection)
    adapter.ExecuteNonQuery()
    return True

Ответы [ 2 ]

1 голос
/ 10 марта 2011

Я не уверен, почему вы получаете ошибку, которую вы получаете. Возможно, это связано с созданием очень длинных операторов SQL? В любом случае, вы должны всегда используйте параметризованные операторы SQL; избегайте составления SQL (с аргументами) вручную:

sql = 'INSERT INTO table (a,b,c) VALUES (%s,%s,%s)'
args = [(1,2,3),(4,5,6),(7,8,9)]
cursor.executemany( sql, args )
0 голосов
/ 13 марта 2011

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

...