在flask中使用SQLAlchemy连接sqllite数据库
设置数据库路径非常重要:
方法:
1 配置数据库
basedir= os.path.abspath(os.path.dirname(__file__)) #获取当前文件的绝对路径 app = Flask(__name__)
# 拼接数据库的URL路径
# os.path.join 把basedir和data.sqlite的路径拼接起来# # data.sqlite为数据库文件,若该文件夹下没有这个文件会自动创建 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+ os.path.join(basedir,'data.sqlite')
# 配置这个键之后,每次请求结束之后都会提交数据库的变动
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] =True db = SQLAlchemy(app)
2 定义模型
# 定义模型
1 # db.Model是一个基类 2 class Role(db.Model): 3 # 对应的数据库表明 4 __tablename__ ='roles' 5 # 设置字段格式 6 id = db.Column(db.Integer,primary_key=True) 7 name = db.Column(db.String(64),unique=True) 8 # 创建与其他表的关系 9 users = db.relationship('User',backref='role',lazy='dynamic') 10 11 def __repr__(self): 12 return ''%self.name 13 14 class User(db.Model): 15 __tablename__ ='users' 16 id = db.Column(db.Integer,primary_key=True) 17 username= db.Column(db.String(64),unique=True,index=True) 18 role_id = db.Column(db.Integer,db.ForeignKey('roles.id')) 19 20 def __repr__(self): 21 return''%self.username
3 操作数据库
db.create_all()
总结:
1 调试代码遇到问题,要先把代码本身什么意思搞清楚,再想解决办法
在调试数据库连接时遇到:
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file
网上说可能是路径不对,我就开始修改
'sqlite:///'
这部分的内容,添加各种路径,然而却没有注意到这部分的内容
os.path.join(basedir,'data.sqlite')
这部分就是文件的路径了,我在 'sqlite:///'怎么加路径都不可能正确啊,吸取这次教训
2 遇到问题多看官方的api文档,基本的问题上面都有说明,在网上看的答案不一定适合现在的版本
3 在设置路径时,路径中不能有空格符,有空格的符的话也会报错
作者:思考者01
链接:https://www.jianshu.com/p/61bcd016bc6b
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。