flask框架 试验sqlite数据库中遇到的问题
项目如图:
已经创建了一个data.sqlite数据库
代码如下
from flask import Flask, render_template, request
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
import os
from flask_sqlalchemy import SQLAlchemy
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
bootstrap = Bootstrap(app)
app.config['SECRET_KEY'] = 'hard to guess string'
app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///' + os.path.join(basedir, 'data.sqlite') # 示例 sqlite数据库的uri指定
# app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@127.0.0.1/scott'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
# 创建两个类,也就是两个表
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
users = db.relationship('User', backref='role') # 列表类型
def __repr__(self):
return '<Role %r>' % self.name
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) # 指定role_id是上一个类中role的id的外键
def __repr__(self):
return '<User %r>' % self.username
db.create_all() # create all tables
admin_role = Role(name='Admin')
mod_role = Role(name='Moderator')
user_role = Role(name='User')
user_john = User(username='john', role=admin_role)
user_susan = User(username='susan', role=user_role)
user_david = User(username='david', role=user_role)
db.session.add(admin_role)
db.session.add(mod_role)
db.session.add(user_role)
db.session.add(user_john)
db.session.add(user_susan)
db.session.add(user_david)
# db.session.add_all([admin_role, mod_role, user_role, user_john, user_susan, user_david])
db.session.commit()
解决方法:
1.删掉原先已经创建的数据库data.sqlite
2.弹出警告,可以将以下代码先注释掉再删除
需要注释的代码:
app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///' + os.path.join(basedir, 'data.sqlite')
3.再次运行
4.我的代码运行后会弹出警告:
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: roles.name
[SQL: INSERT INTO roles (name) VALUES (?)]
[parameters: ('Admin',)]
但是表已经创建好了!