Ошибка при отправке информации в базу данных - PullRequest
0 голосов
/ 15 января 2019

Я делаю код, где программа запрашивает личную информацию о ком-то, затем он читает эту информацию и отправляет в базу данных. Так что у меня есть возможность зарегистрироваться и проконсультироваться. Я не знаю, есть ли у программы больше проблем, потому что мне нужно сначала ее исправить.

Когда я пытаюсь зарегистрировать человека, выдается ошибка «Невозможно зарегистрироваться». и я не могу найти почему.

import sqlite3
conn = sqlite3.connect('database.db')
c = conn.cursor()

def criardb():
    c.execute('CREATE TABLE IF NOT EXISTS pessoas(id INTEGER PRIMARY KEY 
AUTOINCREMENT,nome VARCHAR, idade INT, tel VARCHAR, pais VARCHAR)')
    conn.commit()
def insertdata(nome,idade,tel,pais):
    c.execute = ('INSERT INTO pessoas VALUES (?,?,?,?)', 
(nome,idade,tel,pais))
    conn.commit()
def consultdata():
    sql = c.execute('SELECT * FROM pessoas')
    for row in sql:
        print("Nome: {}".format(row[0]))
def consultdataind(esc):
    sql = c.execute('SELECT * FROM pessoas WHERE id = ?')
    for row in sql(sql,(esc)):
        print("Nome: {} Idade: {} Telefone: {} País: 
{}".format(row[0],int(row[1]),row[2],row[3]))

try:
    print("Creating database...")
    criardb()

except:
    print("ERRO: It was not possible to create the database.")
else:
    print("Database successfully created.")

while True:
    print("Welcome to the register system, choose a option:")
    op = int(input("| 1 - Register | 2 - Consult | 3 - Exit | "))

    if op == 1:
        n = input("Nome: ")
        i = int(input("Idade: "))
        t = input("Telefone: ")
        p = input("País: ")

        try:
            insertdata(n,i,t,p)

        except:
            print("ERRO: It's not possible to register")
        else:
            print("Successfully registered.")
    elif op == 2:
        print("List of registered users:")
        try:
            consultdata()
        except:
            print("It was not possible to load the list.")

        print("Write the person ID to individual consult.")
        esc = int(input(">> "))
        consultdataind(esc)

    elif op == 3:
        break
    else:
        print("Invalid command.")

Мне нужно отправить всю информацию в базу данных и вернуть консультацию, сначала она покажет все зарегистрированное лицо, затем пользователь может написать соответствующий идентификатор кого-либо в списке, и он покажет все детали об этом человеке

1 Ответ

0 голосов
/ 15 января 2019

Замените ваш insertdata этим, и все должно работать нормально.

def insertdata(nome,idade,tel,pais):
    c.execute('INSERT INTO pessoas (nome,idade,tel,pais) VALUES (?,?,?,?)', [nome,idade,tel,pais])
    conn.commit()

Вам необходимо вызвать метод курсора execute здесь.

И в примечании никогда не используйте except напрямую без указания исключения. Он скрывает самые простые сообщения об ошибках, которые сделают ваш код очень сложным для отладки. На данный момент это была AttributeError, которая вызывала эту проблему, когда вы пытались присвоить значение Cursor, то есть ReadOnly

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