Flask Sqlalchemy数据库操作例程

本文介绍了使用Flask-Sqlalchemy进行数据库操作时遇到的挑战,包括Python版本差异和循环引用问题。重点讲解了relationship和foreign key的概念,强调它们在建立对象联系中的作用,并指出默认为一对多关系。同时,解释了主键和外键的区别,主键如同身份证号,外键用于与其他表关联。文章还分享了学习过程及解决方法,并提供了运行后的数据库截图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  Flask Sqlalchemy数据的创建,坑真是多,一不小心就吊坑里TAT,
不同的Python版本也有一些小的不同,哎
学了一天终于基本搞懂了

  ( 好吧 我错了 其实是循环引用的问题)
  这里写图片描述
  
  stackoverflow上类似的问题
  
  sql的理解关键在于relationship,和foreig key,函数relationship是与对象建立联系,联系是双向的!!!!并且在两个相关对象设置了新的字段 ,默认是一对多的关系
  PRIMARY KEY 主键,相当于你的身份证号。
  FOREIGN KEY 外键,一般是其他表的主键,通过这个来到其他表里找到数据。相当于你写在准考证上的身份证号。
  

  haha
  

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)

附上运行后数据库截图截图
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值