Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Script para criação do banco dá "commands out of sync".

Fiz ^C, ^V do script prepara_banco.py e ajustei para a minha configuração (usuário/senha). A conexão com o banco está acontecendo corretamente, mas...

/Users/dclobato/PycharmProjects/Flask2/jogoteca/venv/bin/python /Users/dclobato/PycharmProjects/Flask2/jogoteca/prepara_banco.py
Conectando...
Traceback (most recent call last):
  File "/Users/dclobato/PycharmProjects/Flask2/jogoteca/prepara_banco.py", line 29, in <module>
    conn.cursor().execute(criar_tabelas)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/MySQLdb/cursors.py", line 253, in execute
    self._warning_check()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/MySQLdb/cursors.py", line 148, in _warning_check
    warnings = db.show_warnings()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/MySQLdb/connections.py", line 380, in show_warnings
    self.query("SHOW WARNINGS")
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/MySQLdb/connections.py", line 276, in query
    _mysql.connection.query(self, query)
_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now")

Process finished with exit code 1

Já fiz várias mudanças no script, removendo a criação do banco, deixando a criação, criando o banco na mão... Mas em todos os casos, tenho o mesmo erro, na mesma linha.

Só funciona se eu criar as tabelas na mão (copiando a parte de criação das tabelas para o console do MySQL) e, depois, rodar o script só com a inserção dos dados.

Alguma ideia do que possa estar acontecendo?

2 respostas

Olá Daniel,

Este erro normalmente acontece quando estamos executando vários comandos no mesmo script. As vezes a ordem destes scripts na mesma string gera este erro.

Você poderia postar aqui o conteúdo que colocou na variável criar_tabelas ?

Talvez algum comando colocado aí tenha que ser executado separadamente.

O curso foi feito usando o Python 3.6 e o mysqlDb 0.2.0.

Pode ser alguma diferença de versão tbm.

solução!

Luan,

Eu estou usando exatamente o mesmo script que você colocou disponível no curso. O meu MySQL é o 8.0.3 no macOS.

edit: Fiz funcionar agora, com o seguinte script

# Descomente se quiser desfazer o banco...
conn.cursor().execute("SET NAMES utf8;")
conn.cursor().execute("DROP DATABASE `jogoteca`;")
conn.commit()
conn.cursor().execute("CREATE DATABASE `jogoteca`;")
conn.commit()

conn.cursor().execute("USE `jogoteca`;")
criar_tabelas = '''CREATE TABLE `jogo` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nome` varchar(50) COLLATE utf8_bin NOT NULL,
      `categoria` varchar(40) COLLATE utf8_bin NOT NULL,
      `console` varchar(20) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;'''
conn.cursor().execute(criar_tabelas)
conn.commit()

criar_tabelas = '''CREATE TABLE `usuario` (
      `id` varchar(8) COLLATE utf8_bin NOT NULL,
      `nome` varchar(20) COLLATE utf8_bin NOT NULL,
      `senha` varchar(8) COLLATE utf8_bin NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;'''
conn.cursor().execute(criar_tabelas)
conn.commit()