Пытаюсь вставить данные в базу данных SQL. Ошибка 1046 База данных не выбрана

#python #mysql

#python #mysql

Вопрос:

У меня есть некоторые данные в файле с разделителями табуляции, которые я пытаюсь вставить в базу данных SQL. Вот мой код

 import csv
import MySQLdb

new_db = MySQLdb.connect(host='localhost',user='me')
cursor = new_db.cursor()

cursor.execute('create database if not exists my_database')

maketablestr = """CREATE TABLE info (Disease VARCHAR(10), NCBI Acc. Number VARCHAR(10) ,Length VARCHAR(10), Sequence VARCHAR(10));"""

cursor.execute(maketablestr)
new_db.commit()

tsv_read = csv.reader(file('marfan.tsv'), delimiter = 't')

for row in tsv_read:
    cursor.execute('INSERT INTO info(Disease, NCBI Acc. Number, Length, Sequence ) VALUES(%s, %s, %s, %s)', row)


new_db.commit()
cursor.close()
new_db.close()
print("Database updated")
  

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

Ответ №1:

Для решения этой проблемы есть два подхода:

  1. Вы запускаете cursor.execute('use my_database;')
  2. Или вы адаптируете свои инструкции SQL для указания базы данных, подобной:
 cursor.execute('INSERT INTO my_database.info(Disease, NCBI Acc. Number, Length, Sequence ) VALUES(%s, %s, %s, %s)', row)
  

Обратите внимание, что при более позднем подходе вам необходимо адаптировать все инструкции sql

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

1. Каким будет синтаксис для указания базы данных, когда я выполняю cursor.execute(maketablestr)?

2. Я верю, что это было бы """CREATE TABLE my_database.info (Disease VARCHAR(10), NCBI Acc. Number VARCHAR(10) ,Length VARCHAR(10), Sequence VARCHAR(10));""" но я не эксперт по mysql

3. Спасибо, вы помогли мне решить одну проблему, но теперь у меня где-то ошибка синтаксиса SQL. Я попытаюсь разобраться

4. Рад это слышать: я не уверен со вторым утверждением: не следует ли использовать % для указания начала переменных python вместо , . Также вам, вероятно, нужно окружить вставленные переменные вот так '%s' , а затем всю строку "..." вместо '...' . В общем, вам следует использовать, .format() а не "%s" % my_var нотацию. И, наконец, используйте консоль mysql для отладки, это может упростить задачу, в частности, проверьте правильность инструкции CREATE, успех 🙂