2017-02-04 6 views
0

Когда я запускаю его он дает мне ошибку, как это:Как взять ввод от пользователя как целого и как его добавить в запрос sqlite для получения данных?

Opened database successfully 
enter your name: dsf 
enter your salary: 324 

Traceback (most recent call last): 
File "d1.py", line 13, in <module> 
VALUES (\"" + name + "\", " +salary +")"); 
TypeError: cannot concatenate 'str' and 'int' objects 

Вот мой код:

import sqlite3 

conn = sqlite3.connect('employee.db'); 
print "Opened database successfully"; 


name=raw_input ("enter your name: "); 
salary=input("enter your salary: ")); 

conn.execute("INSERT INTO emplo(NAME,SALARY) \ 
VALUES (\"" + name + "\", " +salary +")"); 


conn.commit() 
print "Records created successfully"; 
conn.close() 
+0

Вы можете использовать 'зарплата = str (raw_input (" введите свою зарплату: ");' просто добавив 'str' там вы можете взять ввод как строку, и, следовательно, вы можете объединить имя и зарплату, поскольку они оба являются строками –

ответ

1

raw_input всегда возвращает значение строки. Первое правило заключается в том, чтобы проверять данные с пользовательского ввода и преобразовывать их, если это необходимо. Использование input - это плохая идея. Вторая проблема заключается в вставке строки в таблицу. Пожалуйста, всегда используйте заполнители для SQLite, как в вашем примере:

import sqlite3 
import logging 


# open db in memory, you can use file instead 
conn = sqlite3.connect(':memory:') 
conn.execute('create table employee(id integer primary key autoincrement,' 
      'name string, salary int)') 
logging.info("Database successfully created") 

name = raw_input('Enter your name: ') 
salary = None 
while salary is None: 
    salary = raw_input('Enter your salary: ') 
    # example of validating input - note, that `input` is not best way for 
    # providing validation 
    try: 
     salary = int(salary) 
    except ValueError: 
     logging.warning('Provided salary is not an integer, try again.') 
     salary = None 

# Use placeholders. Second argument always have to be tuple 
conn.execute('insert into employee(name, salary) values(?, ?)', 
      (name, salary)) 
conn.commit() 
logging.info('Record created successfully') 

# let see what we have in db: 
print conn.execute('select * from employee').fetchall() 

conn.close() 

И не используйте ; :) Python не заботиться о них, но они не нужны.

+0

Я думаю, что в последних двух строках есть ошибка @ user7514815 –

+0

Проверьте, есть ли дополнительная ')' в последней строке. –

+0

Yup, приятно поймать. – gryf