2017-02-04 5 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

'salary = str(raw_input(" salary: ");'を入力するだけで、 'str'を追加することで入力を文字列として取ることができます。したがって、名前と給与を両方とも文字列として連結できます –

答えて

1

raw_inputは常に文字列値を返します。最初のルールは、ユーザーの入力からデータを検証し、必要に応じて変換します。そのためにinputを使用することは悪い考えです。 2番目の問題は、行をテーブルに挿入することです。 、常にあなたの例のように、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

最後の2行に@ user7514815というエラーがあると思います。 –

+0

最終行に余分な ')'があるかどうかを確認してください。 –

+0

うん、良いキャッチ。 – gryf

関連する問題