【问题标题】:Python SQLite3, table not showing updatesPython SQLite3,表未显示更新
【发布时间】:2021-01-31 04:46:54
【问题描述】:

我正在尝试在 Python 中使用 SQLite3 创建数据库。

创建表似乎可以工作,但是每当我尝试插入数据时,它似乎没有向数据库添加任何内容,因为 fetchall() 没有返回任何内容,但是,如果我再次尝试创建 ID,它会抱怨 唯一约束失败。

初始化:

import sqlite3
conn = sqlite3.connect('login.db')
c = conn.cursor()

表创建:

c.execute("""CREATE TABLE Login (ID INTEGER PRIMARY KEY,
First TEXT NOT NULL,
Last TEXT NOT NULL,
Middle TEXT NOT NULL,
Gender TEXT NOT NULL);""")
conn.commit()

数据插入:

c.execute("""INSERT INTO Login VALUES (6, 'First', 'Last', 'Hello', 'Male');""")
conn.commit()

获取表格:

print(c.fetchall())

c.close()
conn.close()

将表格放入在线阅读器时,它也显示为空。

编辑: 这是数据库阅读器和谷歌表格中显示的内容, 大量空白/“;”那么这个

【问题讨论】:

  • 尝试在 INSERT 语句中指定列。
  • 我做了,它什么也没做

标签: python sqlite


【解决方案1】:

c.fetchall() 将返回 SELECT 查询中的所有行,而您没有这样做。

import sqlite3
conn = sqlite3.connect('login.db')
c = conn.cursor()
c.execute("""CREATE TABLE Login (ID INTEGER PRIMARY KEY, First TEXT NOT NULL, Last TEXT NOT NULL, Middle TEXT NOT NULL, Gender TEXT NOT NULL);""")
conn.commit()
c.execute("""INSERT INTO Login VALUES (6, 'First', 'Last', 'Hello', 'Male');""")
conn.commit()
c.execute("SELECT * FROM login")
print(c.fetchall())

很乐意打印

[(6, 'First', 'Last', 'Hello', 'Male')]

顺便说一句,您的代码容易受到 SQL 注入攻击,您应该这样做

import sqlite3

conn = sqlite3.connect("login.db")
c = conn.cursor()
c.execute(
    """CREATE TABLE Login (ID INTEGER PRIMARY KEY, First TEXT NOT NULL, Last TEXT NOT NULL, Middle TEXT NOT NULL, Gender TEXT NOT NULL);"""
)
conn.commit()
c.execute(
    "INSERT INTO Login (ID, First, Last, Middle, Gender) VALUES (?,?,?,?,?)",
    (6, "First", "Last", "Hello", "Male"),
)
conn.commit()
c.execute("SELECT * FROM login")
print(c.fetchall())

【讨论】:

  • 感谢您的帮助。
  • 几个小时后我知道了,但我查看了 SQL 注入漏洞部分,它看起来确实是个大问题!这不是生产代码,但我不知道这个漏洞,谢谢指出。
  • 即便如此,当您第一次尝试插入带有引号字符的任何内容时,您还是会遇到这个问题 :)
猜你喜欢
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
相关资源
最近更新 更多