#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 («не все аргументы преобразованы при форматировании строки»)