zoukankan      html  css  js  c++  java
  • flask + pymysql操作Mysql数据库

    安装flask-sqlalchemy、pymysql模块

    pip install flask-sqlalchemy pymysql
    

     ### Flask-SQLAlchemy的介绍

    1. ORM:Object Relationship Mapping(模型关系映射)。
    2. flask-sqlalchemy是一套ORM框架。
    3. ORM的好处:可以让我们操作数据库跟操作对象是一样的,非常方便。因为一个表就抽象成一个类,一条数据就抽象成该类的一个对象。
    4. 安装`flask-sqlalchemy`:`sudo pip install flask-sqlalchemy`。

    安装Mysql数据库

    from flask.ext.sqlalchemy import SQLAlchemy
    from flask import Flask
    
    '''配置数据库'''
    app = Flask(__name__)
    app.config['SECRET_KEY'] ='hard to guess'
    # 这里登陆的是root用户,要填上自己的密码,MySQL的默认端口是3306,填上之前创建的数据库名jianshu,连接方式参考 
    # http://docs.sqlalchemy.org/en/latest/dialects/mysql.html
    app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://jianshu:jianshu@127.0.0.1:3306/jianshu'
    #设置这一项是每次请求结束后都会自动提交数据库中的变动
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
    #实例化
    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)
        user = db.relationship('User', backref='role')
    
        #repr()方法显示一个可读字符串,虽然不是完全必要,不过用于调试和测试还是很不错的。
        def __repr__(self):
            return '<Role {}> '.format(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'))
    
        def __repr__(self):
            return '<User {}>'.format(self.username)
    

      

    关系

    关系数据库通过使用关系在不同的表中建立连接。关系图表达了用户和用户角色之间的简单关系。这个角色和用户是一对多关系,因为一个角色可以从属于多个用户,而一个用户只能拥有一个角色。
    下面的模型类展示了中表达的一对多关系。

    class Role(db.Model): 
      # ...
      users = db.relationship('User', backref='role')
    
    class User(db.Model): 
      # ...
      role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    

     

    #!/usr/bin/env python
    
    from exts import db
    from datetime import datetime
    
    
    class User(db.Model):
        __tablename__ = 'user'
        id = db.Column(db.Integer,primary_key=True,autoincrement=True)
        username = db.Column(db.String(50),nullable=False)
        telephone = db.Column(db.String(11),nullable=False)
        password = db.Column(db.String(100), nullable=False)
    
    class Questions(db.Model):
        __tablename__ = 'questions'
        id = db.Column(db.Integer,primary_key=True,autoincrement=True)
        title = db.Column(db.String(100),nullable=False)
        content = db.Column(db.Text,nullable=False)
        create_time = db.Column(db.DateTime,default=datetime.now)
        author_id = db.Column(db.Integer,db.ForeignKey('user.id'))
    
        author = db.relationship('User',backref=db.backref('questions'))
    
    class Answer(db.Model):
        __tablename__ = 'answer'
        id = db.Column(db.Integer,primary_key=True,autoincrement=True)
        content = db.Column(db.Text,nullable=False)
        question_id = db.Column(db.Integer,db.ForeignKey('questions.id'))
        author_id = db.Column(db.Integer,db.ForeignKey('user.id'))
    
        question = db.relationship('Questions',backref = db.backref('answers'))
        author = db.relationship('User',backref = db.backref('answers'))
    

    Flask-SQLAlchemy数据的增、删、改、查:

    1. 增:
    # 增加:
    article1 = Article(title='aaa',content='bbb')
    db.session.add(article1)
    # 事务
    db.session.commit()
    2. 查:
    # 查
    # select * from article where article.title='aaa';
    article1 = Article.query.filter(Article.title == 'aaa').first()
    print 'title:%s' % article1.title
    print 'content:%s' % article1.content
    3. 改:
    # 改:
    # 1. 先把你要更改的数据查找出来
    article1 = Article.query.filter(Article.title == 'aaa').first()
    # 2. 把这条数据,你需要修改的地方进行修改
    article1.title = 'new title'
    # 3. 做事务的提交
    db.session.commit()
    4. 删:
    ```
    # 删
    # 1. 把需要删除的数据查找出来
    article1 = Article.query.filter(Article.content == 'bbb').first()
    # 2. 把这条数据删除掉
    db.session.delete(article1)
    # 3. 做事务提交
    db.session.commit()
    ```

  • 相关阅读:
    在Java中使用 break/continue 语句来控制多重嵌套循环的跳转
    Android系统架构基本模式解析
    添加蓝牙通讯功能
    wince串口蓝牙
    Android各层推荐开发书籍及参考资料
    CDEFINES的用法
    蓝牙地址的规则
    WinCE中sources文件中targetlibs与sourcelibs的作用与区别
    Java初学者不得不知的概念,JDK,JRE,JVM的区别?
    WINCE的内存配置config.bib文件的解析
  • 原文地址:https://www.cnblogs.com/caicairui/p/7821559.html
Copyright © 2011-2022 走看看