我有两件事需要帮助:
1)我不确定如何使用sqlite3
库检查python中是否存在表。
2)我不确定如何将程序中的变量保存到数据库中。我希望能够在创建数据库之前检查UserDetails
是否存在。
我一直在阅读,每个人的做法都不同,
这是我的代码节,负责保存变量:
connection = sqlite3.connect("UserDetails.db")
crsr = connection.cursor()
#create table
sql_command = table_creator
crsr.execute(sql_command)
#insert values into table
data_to_insert = (username, first_name, surname, age, user_salt, password_hash, date_today)
sql_command = """INSERT INTO UserDetails VALUES ((?, ?, ?, ?, ?, ?, ?), data_to_insert);"""
crsr.execute(sql_command)
connection.commit() #save changes
connection.close() #terminate connection
并且如果您想看到table_creator
,它看起来像这样:
table_creator = '''CREATE TABLE `UserDetails` (
`Username` VARCHAR(8) NOT NULL,
`Firstname` VARCHAR(10) NOT NULL,
`Surname` VARCHAR(20) NOT NULL,
`Age` INT(2) NOT NULL,
`Salt` VARCHAR(10) NOT NULL,
`Hash` VARCHAR(64) NOT NULL,
`Date` DATE NOT NULL,
PRIMARY KEY (`UserName`)
);'''
我将不胜感激,并给予反馈或支持。我仍在学习编码,我的CompSci老师没有专门教我们Python,所以我知道的是自学的。
哦,这是我收到的错误消息:
Traceback (most recent call)
File "c:/Users/Arslan/Project A2/login.py", line 99, in <module>
save_details()
File "c:/Users/Arslan/Project A2/login.py", line 93, in save_details
crsr.execute(sql_command)
sqlite3.OperationalError: no such column: data_to_insert
1)我不确定如何使用sqlite3库检查python中是否存在表。
CREATE TABLE IF NOT EXISTS
2)我不确定如何将程序中的变量保存到数据库中。
您可以使用以下语法传递用于插入的变量:
table_creator = '''CREATE TABLE IF NOT EXISTS `UserDetails` (
`Username` VARCHAR(8) NOT NULL,
`Firstname` VARCHAR(10) NOT NULL,
...
);'''
如何检查表是否存在:
使用此查询:
data_to_insert = (username, first_name, surname, age, user_salt, password_hash, date_today)
sql_command = '''INSERT INTO UserDetails VALUES (?, ?, ?, ?, ?, ?, ?)''';
crsr.execute(sql_command, data_to_insert )
用表修改SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}';
进行检查有两种情况:
。如果光标等于0 ==>表不存在否则,该表存在
使用:
{table_name}
示例:
PRAGMA table_info(table_name)
使用此查询:
如果表存在,它将为表的每一行返回常量1,否则将不返回常量。
如何将程序中的变量保存到数据库:
要将数据插入sqlite3,可以使用:
select 1 from table
请勿使用(SQL注入):
cursor.execute("insert into UserDetails values (?, ?, ?, ?, ?, ?, ?)", (username, firstname, surname, age, salt, hash, date))
不要忘记:
cursor.execute("insert into UserDetails values ('{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}')".format(username, firstname, surname, age, salt, hash, date))
或者您也可以代替使用它作为上下文管理器:
conn.commit()