SQLite3帮助,将变量保存到数据库中

问题描述 投票:0回答:2

我有两件事需要帮助:

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

python sql python-3.x sqlite
2个回答
0
投票

1)我不确定如何使用sqlite3库检查python中是否存在表。

使用CREATE TABLE IF NOT EXISTS

CREATE TABLE IF NOT EXISTS

2)我不确定如何将程序中的变量保存到数据库中。

您可以使用以下语法传递用于插入的变量:

table_creator = '''CREATE TABLE IF NOT EXISTS `UserDetails` ( 
    `Username` VARCHAR(8) NOT NULL,
    `Firstname` VARCHAR(10) NOT NULL,
...
);'''

0
投票

如何检查表是否存在:

  • 第一种方式:

使用此查询:

 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)

  • 第三种方式:

使用此查询:

enter image description here

如果表存在,它将为表的每一行返回常量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()
© www.soinside.com 2019 - 2024. All rights reserved.