Flask Sqlalchemy数据的创建,坑真是多,一不小心就吊坑里TAT,
不同的Python版本也有一些小的不同,哎
学了一天终于基本搞懂了
( 好吧 我错了 其实是循环引用的问题)
stackoverflow上类似的问题
sql的理解关键在于relationship,和foreig key,函数relationship是与对象建立联系,联系是双向的!!!!并且在两个相关对象设置了新的字段 ,默认是一对多的关系
PRIMARY KEY 主键,相当于你的身份证号。
FOREIGN KEY 外键,一般是其他表的主键,通过这个来到其他表里找到数据。相当于你写在准考证上的身份证号。
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
from os import path
from werkzeug.routing import BaseConverter
from flask_nav import Nav
from flask_nav.elements import *
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
import os
# from auth import auth
# 定义转换器类
class RegexConvert(BaseConverter):
def __init__(self, url_map, *items):
super(BaseConverter, self).__init__()
self.regex = items[0]
nav = Nav()
db=SQLAlchemy()
basedir=path.abspath(path.dirname(__file__))
SECRET_KEY='sunqi'
SQLALCHEMY_TRACK_MODIFICATIONS=True
DEBUG=True
USERNAME='sunqi'
PASSWORD='213919'
#app工厂函数进行全局设置,创建后被引用
bt=Bootstrap()
def create_app():
app = Flask(__name__)
app.url_map.converters['regex'] = RegexConvert # 设置转换器
app.config.from_object(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///'+ os.path.join(basedir, 'data.db')
# bt.init_app(app)
#数据库绑定
db.init_app(app)
db.app=app
db.create_all()
#注册蓝图
# app.register_blueprint(auth,url_prefix='')
#构建绑定导航栏
# nav.register_element('top', Navbar('Flask主页',
# View('sunqi主页', 'index'),
# View('服务', 'Service'),
# View('关于', 'About'),
# View('登录', 'auth.login'),
# ))
nav.init_app(app)
# init_views(app) #构建路由视图函数
return app
class Role(db.Model):
__tablename__='roles'
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(80))
user=db.relationship('User',backref='role')
# def __init__(self,name): #初始化以后反而会出错。。。。官方例子User是初始化过的,千奇百怪!!!
# self.id=name
def __repr__(self):
return ('<id:%s,name:%s>'%(self.id,self.name))
class User(db.Model):
__tablename__='users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
email = db.Column(db.String)
password = db.Column(db.String)
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
if __name__=='__main__':
create_app()
admin=Role(name='a')
# mod=User('mod','sd','29')
db.session.add(admin)
db.session.commit()
print(admin.id)
s=Role.query.all()
print(s)
附上运行后数据库截图截图