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

У меня есть некоторые данные в файле с разделителями табуляции, которые я пытаюсь вставить в базу данных 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 «База данных не выбрана». Я немного смущен тем, почему я получаю эту ошибку, поскольку код, который я написал, в основном взят у других, которые пытаются сделать то же самое, что и я.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
191
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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-операторы все.

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

flannel_bioinformatician 09.04.2019 18:33

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

Lucas 09.04.2019 18:36

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

flannel_bioinformatician 09.04.2019 18:51

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

Lucas 09.04.2019 18:58

Другие вопросы по теме