sqlite3 Оператор Select не работает в Python - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть база данных 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

1 Ответ

0 голосов
/ 19 декабря 2018

Похоже, что ваш вопрос не хватает ключевой информации.Ошибка NameError: name 'f' is not defined - это ошибка Python, указывающая на то, что вы имеете в виду что-то, предположительно называемое f, которое еще не было определено.

Выполнение предоставленного вами SQL-кода и запуск приведенного ниже сценария из Python работаетбез проблем:

import sqlite3

connection = sqlite3.connect('pets.db')
cursor = connection.cursor()


def sql():
    return "SELECT name, breed FROM dogs WHERE gender = 'F';"


cursor.execute(sql()).fetchall()

С ошибкой вы, вероятно, также получите номер строки и имя модуля, где происходит эта ошибка.Вы, вероятно, должны внимательно посмотреть, как точное написание отличается от приведенного выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...