如何使用python和sqlite存储数据?



以下代码应该是一个简单的用户注册。

数据库.db

import sqlite3
conn = sqlite3.connect('database.db')
conn.execute('CREATE TABLE accounts (username TEXT, password TEXT)')
conn.close()

views.py

import sqlite3    
DATABASE = '../FlaskWebProject/database.db'
with app.app_context():
username = request.form['username'];                  
password = request.form['password'];

query_db("insert into accounts (username, password) values (username, password)")

def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
return db
def query_db(query, args=(), one=False):
cur = get_db().execute(query, args)
rv = cur.fetchall()
cur.close()
return (rv[0] if rv else None) if one else rv

错误:

SQLite3.操作错误:没有这样的表:帐户

sqlite3库在未配置isolation_level时隐式执行事务管理。缺省情况下,修改数据库的语句在事务中隐式管理。 在此模式下,您需要在执行操作后提交对数据库的修改。

conn.execute('CREATE TABLE accounts (username TEXT, password TEXT)')
conn.commit()

此方法提交当前事务。如果不调用此方法,则自上次调用 commit(( 以来所做的任何操作在其他数据库连接中都看不到。如果你想知道为什么你看不到你写入数据库的数据,请检查你没有忘记调用这个方法。

如果要关闭此行为并在执行操作时立即写入数据,则可以在建立与数据库的连接时将isolation_level设置为None

conn = sqlite3.connect('sample.sqlite', isolation_level=None)

有一些关于控制事务的可用选项的文档。

请注意,虽然 (connection.execute工作([https://docs.python.org/3/library/sqlite3.html#using-快捷方式-方法] 作为在数据库中执行操作的快捷方式,但它会隐式创建一个游标。我倾向于从连接显式创建游标并将其用于数据库操作。

cur = conn.cursor()
cur.execute('CREATE TABLE accounts (username TEXT, password TEXT)')
conn.commit()
conn.close()

最新更新