У меня есть некоторые данные в файле с разделителями табуляции, которые я пытаюсь вставить в базу данных 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 «База данных не выбрана». Я немного смущен тем, почему я получаю эту ошибку, поскольку код, который я написал, в основном взят у других, которые пытаются сделать то же самое, что и я.
Есть два подхода к решению этой проблемы:
cursor.execute('use my_database;')
cursor.execute('INSERT INTO my_database.info(Disease, NCBI Acc. Number, Length, Sequence ) VALUES(%s, %s, %s, %s)', row)
Обратите внимание, что при более позднем подходе вам необходимо адаптировать SQL-операторы все.
Я думаю, что это было бы """CREATE TABLE my_database.info (Disease VARCHAR(10), NCBI Acc. Number VARCHAR(10) ,Length VARCHAR(10), Sequence VARCHAR(10));"""
, но я не эксперт по MySQL
Спасибо, вы помогли мне решить одну проблему, но теперь у меня где-то синтаксическая ошибка SQL. попробую разобраться
Рад это слышать: я не уверен во втором утверждении: не следует ли вам использовать %
для указания начала переменных Python, а не ,
. Также вам, вероятно, нужно окружить вставленные переменные вот так '%s'
, а затем всю строку "..."
, а не '...'
. В общем, вам следует изучить использование .format()
, а не нотации "%s" % my_var
. И, наконец, используйте консоль mysql для отладки, это может упростить задачу, особенно проверить правильность оператора CREATE, успех :)
Каким будет синтаксис для указания базы данных при выполнении cursor.execute(maketablestr)?