Ошибка MYSQL и python

#python #mysql

#python #mysql

Вопрос:

Я хочу вставить данные в базу данных MYSQL, используя python, вот мой код

 import MySQLdb
#connect to db
db= MySQLdb.connect(host= "localhost",
              user="root",
              passwd="newpassword",
              db="new_schema")
#setup cursor
cursor = db.cursor()
#create anooog1 table
cursor.execute("DROP TABLE IF EXISTS try")
sql = """CREATE TABLE try (
      COL1 INT,            COL2 INT )"""
cursor.execute(sql)


#insert to table
cursor.execute("""INSERT INTO try VALUES (%s,%s)""",(188,90))
db.commit()   
db.rollback()
#show table
cursor.execute("""SELECT * FROM try""")

print cursor.fetchall()
db.close()
  

но ошибка в моем sql

 Error: `new_schema`.`try`: table data is not editable because there is no primary key defined for the table ...
  

Что мне делать?

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

1. Почему вы делаете rollback после commit ?

2. Как насчет определения первичного ключа?

3. alter table try add primary key (col1) возможно?

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

Ответ №1:

Ваша ошибка заключается в том, что вы создали таблицу без первичного ключа.

Используйте этот оператор (или аналогичный):

 sql = """CREATE TABLE try (COL1 INT, COL2 INT, PRIMARY KEY (COL1))"""
  

Здесь мы указываем, что COL1 должно быть первичным ключом для таблицы. Измените, как вам нужно, в соответствии с вашими требованиями.

Если вы хотите добавить столбец string (длиной 128) в вашу таблицу:

  CREATE TABLE try (COL1 INT, COL2 INT, MyString VARCHAR(128), PRIMARY KEY (COL1))  
  

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

1. @roro: всегда пожалуйста! Обязательно ставьте зеленую галочку на все свои вопросы, когда найдете наилучший ответ.

2. cursor.execute(«»»ВСТАВИТЬ В ЗНАЧЕНИЯ opa (%s,%s)»»»,(«lolo», «ghost»))

3. OperationalError: (1136, «Количество столбцов не соответствует количеству значений в строке 1»)

4. @roro: У вас есть 1, или 3, или 4, или … столбцы определены для таблицы, но вы передаете 2 значения

5. @roro: У вас больше аргументов, чем слотов формата, например, "foo %s bar" % (1, 2, 3) имеет 3 аргумента и 1 слот. Кстати, это третий дополнительный вопрос, который вы задали в комментариях. Самое время задать новый вопрос! Также пришло время приобрести некоторые простые навыки самопомощи, например, Google («не все аргументы преобразованы при форматировании строки»)