単純な ddl プログラムですが、応答が y または n を使用すると、名前エラーが発生します。y は定義されていません。1 または 2 を使用するようにコードを変更すると、プログラムは正常に動作します。y または n が名前エラーをスローする方法に混乱しています。入力結果を文字列として定義しようとしましたが、それでも名前エラーが発生しました。
import sqlite3
#
def create_table(db_name,table_name,sql):
with sqlite3.connect(db_name) as db:
cursor = db.cursor()
cursor.execute('select name from sqlite_master where name=?',(table_name,))
result = cursor.fetchall()
keep_table = True
if len(result) == 1:
#Problem area
response = input('The table {0} already exists, do you wish to overide? (y/n): '.format(table_name))
if response == 'y':
#Problem area end
keep_table = False
cursor.execute('drop table if exists {0}'.format(table_name))
print('Table overwritten')
db.commit()
else:
print('Table kept')
else:
keep_table = False
if not keep_table:
cursor.execute(sql)
db.commit()
#
if __name__ == '__main__':
db_name = 'coffee_shop.db'
sql = '''create table Product
(ProductID integer,
Name varchar(30),
Price real,
primary key(ProductID))'''
create_table(db_name,'Product',sql)
エラーメッセージ
The table Product already exists, do you wish to overide? (y/n): y
Traceback (most recent call last):
File "coffee_shop_v2.db", line 34, in <module>
create_table(db_name,'Product',sql)
File "coffee_shop_v2.db", line 13, in create_table
response = input('The table {0} already exists, do you wish to overide? (y/n): '.format(table_name))
File "<string>", line 1, in <module>
NameError: name 'y' is not defined