#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:
Для решения этой проблемы есть два подхода:
- Вы запускаете
cursor.execute('use my_database;')
- Или вы адаптируете свои инструкции 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));"""
но я не эксперт по mysql3. Спасибо, вы помогли мне решить одну проблему, но теперь у меня где-то ошибка синтаксиса SQL. Я попытаюсь разобраться
4. Рад это слышать: я не уверен со вторым утверждением: не следует ли использовать
%
для указания начала переменных python вместо,
. Также вам, вероятно, нужно окружить вставленные переменные вот так'%s'
, а затем всю строку"..."
вместо'...'
. В общем, вам следует использовать,.format()
а не"%s" % my_var
нотацию. И, наконец, используйте консоль mysql для отладки, это может упростить задачу, в частности, проверьте правильность инструкции CREATE, успех 🙂