@1kbfree
2018-05-16T23:11:54.000000Z
字数 2818
阅读 1130
flask
数据库是一个网站的基础,在Flask中可以自由的使用MySQL、PostgreSQL、SQLite、Redis、MongoDB来写原生的语句实现功能,也可以使用更高级别的数据库抽象方式,如SQLAlchemy或MongoEngine这样的OR(D)M。
linux
,通过命令sudo apt-get install mysql-server libmysqlclient-dev -yq
进行下载安装。MySQLdb
是用Python
来操作mysql
的包,因此通过pip
来安装,命令如下:pip install mysql-python
。SQLAlchemy
是一个数据库的ORM框架,我们在后面会用到。安装命令为:pip install SQLAlchemy
。创建数据库字段以及增删改查操作:
config.py:
'''
数据库格式要写成这样:
dialect+driver://username:password@host:port/database?charset=utf8
'''
DIALECT = 'mysql' #选择使用mysql数据库
DRIVER = 'mysqldb' #驱动是mysqldb
USERNAME = 'root' #mysql登录的账号
password = 'root' #mysql登录的密码
HOST = '127.0.0.1' #地址,默认是127.0.0.1也可以输入localhost
PORT = '3306' #mysql的端口号 如果没有修改默认是3306
DATABASE = 'flask_db' #数据库名称
# 开始拼接成要求的格式
SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,USERNAME,password,HOST,PORT,DATABASE) #一定要 SQLALCHEMY_DATABASE_URI 这个变量名
test1.py:
from flask import Flask, render_template, url_for
from flask_sqlalchemy import SQLAlchemy
import config
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
class flaskdb(db.Model):
__tablename__ = 'flaskdb' # 表名
id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 创建一个字段为id,表示为主键,并且自增长
title = db.Column(db.String(100), nullable=True) # 创建一个字符型字段,最多可容纳100个字,可以为空
content = db.Column(db.Text, nullable=True) # 创建一个Text字段,可以为空
# db.create_all() #会在flask_db这个数据库里创建一个flaskdb(上面定义的类)表
@app.route('/')
def index():
'''
# 增
# 填写添加内容:
rel = flaskdb(title='title1', content='title1_content')
# 添加内容到数据库:
db.session.add(rel)
# 事物处理
db.session.commit()
'''
'''
# 查
rel = flaskdb.query.filter( flaskdb.title == 'title1' ).first() #查询flaskdb这个表里面title为title1的那一条数据
print(rel.title) #打印查询到的title
print(rel.content) #打印查询到的content
'''
'''
# 改
# 首先找到要改的数据
rel = flaskdb.query.filter( flaskdb.title == 'title1' ).first() #查询flaskdb这个表里面title为title1的那一条数据
# 修改找到的那条数据的title
rel.title = 'new title1'
# 事物处理
db.session.commit()
'''
'''
# 删
# 首先找到要删的数据
rel = flaskdb.query.filter( flaskdb.title == 'new title1' ).first() #查询flaskdb这个表里面title为title1的那一条数据
# 删除
db.session.delete( rel )
# 事物处理
db.session.commit()
'''
return "hello"
if __name__ == '__main__':
app.run(debug=True, host='127.0.0.1', port=80)
创建一个文章表关联用户表:
class Users( db.Model ): #用户表
__tablename__ = 'users'
id = db.Column( db.Integer, primary_key=True, autoincrement=True ) # 创建一个字段为id,表示为主键,并且自增长
username = db.Column( db.String( 11 ),nullable = False )
class Article( db.Model ): #文章表
__tablename__ = 'article'
id = db.Column( db.Integer, primary_key=True, autoincrement=True ) # 创建一个字段为id,表示为主键,并且自增长
title = db.Column( db.String( 100 ),nullable = False )
content = db.Column( db.Text,nullable = False )
author_id = db.Column( db.Integer,db.ForeignKey( 'users.id' ) )
查询某篇文章的作者:
# 找到title为title_iamfree1的作者
# 首先找到title为title_iamfree1的文章:
article = Article.query.filter( Article.title == 'title_iamfree1' ).first()
# 把查询到的文章的author_id与Users表的id进行查询,查询到的就是作者的名称
author_name = Users.query.filter( Users.id == article.author_id ).first()
return 'hellow %s'%author_name.username