AttributeError: у объекта 'str' нет атрибута 'execute' - PullRequest
0 голосов
/ 19 мая 2019

Я хочу добавить опцию, но где у меня ошибка?

conn=sqlite3.connect('tutorial.db')
c=conn.cursor()

def create_table():
  c.execute('CREATE TABLE IF NOT EXISTS test (UNIX REAL, datestamp TEXT, keyword TEXT, value REAL)')

def data_entry(a,b,c,d):
  c.execute("INSERT INTO test VALUES ({}, '{}', '{}', {})".format(a,b,c,d))
  conn.commit()
  c.close()
  conn.close()
#create_table()
data_entry(1,"test","test2",3)

Ответы [ 2 ]

3 голосов
/ 19 мая 2019

В def data_entry(a,b,c,d): есть локальная переменная c, которая передается в виде строки и используется как функция execute, которая в итоге выполняет "test2".execute().

Эта проблема должна быть исправлена.И одно исправление - если я явно использую curr в качестве переменной для представления курсора.

conn=sqlite3.connect('tutorial.db')
curr=conn.cursor()

def create_table(curr):
  curr.execute('CREATE TABLE IF NOT EXISTS test (UNIX REAL, datestamp TEXT, keyword TEXT, value REAL)')

#curr is the last argument
def data_entry(a,b,c,d, curr):
  curr.execute("INSERT INTO test VALUES ({}, '{}', '{}', {})".format(a,b,c,d))
  conn.commit()
  curr.close()
  conn.close()

#Explicitly passing curr to functions
create_table(curr)
data_entry(1,"test","test2",3, curr)

В будущем убедитесь, что вы называете вашу переменную короткой и описательной, например curr, и, возможно, строки как val_1, val_2 и т. Д. Чтобы вы знали из названия, для чего используются переменные.

Это хороший ресурс для именования переменных: PEP-8

2 голосов
/ 19 мая 2019

В вашем исходном коде ваш локальный параметр c затеняет глобальную переменную курсора c. Вы должны передать курсор и соединение в качестве аргументов:

def create_table(cursor):
    cursor.execute('CREATE TABLE IF NOT EXISTS test (UNIX REAL, datestamp TEXT, keyword TEXT, value REAL)')


def data_entry(cursor, conn, a, b, c, d):
    cursor.execute("INSERT INTO test VALUES ({}, '{}', '{}', {})".format(a, b, c, d))
    conn.commit()
    cursor.close()
    conn.close()


conn = sqlite3.connect('tutorial.db')
cursor = conn.cursor()

create_table(cursor)
data_entry(cursor, conn, 1,"test","test2",3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...