У меня есть база данных sqlite3, которая была создана с помощью следующего оператора CREATE в файле .sql:
create.sql
CREATE TABLE dogs (id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER,
gender CHAR(1),
breed TEXT,
temperament TEXT,
hungry BOOLEAN);
и заполнена следующими данными с помощью оператора INSERT в файле .sql:
insert.sql
INSERT INTO dogs (name, age, gender, breed, temperament, hungry) VALUES
("Snoopy", 3, "M", "beagle", "friendly", 1),
("McGruff", 10, "M", "bloodhound", "aware", 0),
("Scooby", 6, "M", "great dane", "hungry", 1),
("Little Ann", 5, "F", "coonhound", "loyal", 0),
("Pickles", 13, "F", "black lab", "mischievous", 1),
("Clifford", 4, "M", "big red", "smiley", 1),
("Lassie", 7, "F", "collie", "loving", 1),
("Snowy", 8, "F", "fox terrier", "adventurous", 0),
(NULL, 4, "M", "golden retriever", "playful", 1);
У меня есть записная книжка Python Jupyter, в которой я выполняю следующие действия для создания и заполнения базы данных pets.db:
import sqlite3
connection = sqlite3.connect('pets.db')
cursor = connection.cursor()
file = open("./create.sql", 'r')
create_sql = file.read()
cursor.executescript(create_sql)
file1 = open("./insert.sql", 'r')
insert_sql = file1.read()
cursor.executescript(insert_sql)
Затем у меня есть файл функций Python под названием'selects.py', где я храню операторы выбора SQL.Первый, показанный ниже, предназначен для того, чтобы вернуть имя и породу всех собак женского пола в таблице.
def sql():
return "SELECT name, breed FROM dogs WHERE gender = 'F';"
Затем я пытаюсь запустить вышеуказанную функцию в Jupyter:
from selects import sql
cursor.execute(sql()).fetchall()
И я получаю следующую ошибку:
NameError: name 'f' is not defined
В течение последнего часа я пытался отформатировать оператор select таким образом, чтобы он работал в файле Python, но каждый раз получаю короткую информацию.Это способ написания оператора SQL SELECT, который является неправильным, или это что-то в формате кода Python?
edit: Вот полная трассировка:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-87-df843ecc4fb9> in <module>()
1 from selects import sql
----> 2 cursor.execute(sql())
3 results = cursor.fetchall()
4 results
~/ds-practice/selects.py in sql()
1 def sql():
----> 2 return "SELECT name, breed FROM dogs WHERE gender = 'F';"
3
4
5
NameError: name 'f' is not defined