MySQL 的下载与配置
操作系统:OS X
下载:https://dev.mysql.com/downloads/mysql/
安装:Mac安装MySQL很简单,一直下一步即可。注意:安装MySQL之后,安装的最后一步有一个初始密码,初始密码要记下来,密码忘了也是有办法改的,方法如下:
设置:
初始化密码比较麻烦,方法如下:
[转自脚本之家]
step1:
苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop mysql server)step2:
进入终端输入:cd /usr/local/mysql/bin/
回车后 登录管理员权限sudo su
回车后输入以下命令来禁止mysql验证功能./mysqld_safe --skip-grant-tables &
回车后mysql会自动重启(偏好设置中mysql的状态会变成running)step3.
输入命令./mysql
回车后,输入命令FLUSH PRIVILEGES;
回车后,输入命令SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');
至此,密码修改完成,可以成功登陆。
Flask-SQLAlchemy 的使用
1、初始化和设置数据库配置信息
*使用flask_sqlalchemy
中的SQLAlchemy
进行初始化:
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
2、设置配置信息,在‘config.py’文件中添加下面信息
#dialect+driver://username:password@host:port/database
DIALECT = 'mysql'
DRIVER = 'mysqldb'
USERNAME = 'root'
PASSWORD = '941112'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'db_demo1'
SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
SQLALCHEMY_TRACK_MODIFICATIONS = False
3、主‘app’文件中,添加配置文件
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
4、做测试看看有没有问题
db.create_all()
没有报错就是成功了!
5、使用Flask_SQLAlchemy创建模型与表的映射
创建模型与表的映射:
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
模型需要继承自db.Model
,然后需要映射到表中的属性,必须写成db.Column
的数据类型
class Article (db.Model):
#声明时用'__tablename__'是系统规定的。
__tablename__ = 'article'
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)
数据类型:
db.Integer
代表的是整形;db.String
代表的是varchar
,需要制定最长的长度;db.Text
代表的是text
。
其他参数:
primary_key
代表的是将这个字段设置为主键;autoincrement
代表的是这个主键为自增长的;nullable
代表的是这个字段是否可以为空,默认是可以为空,可以将这个值设置为False
,在数据库中,这个值就不能为空了;
6、Flask-SQLAlchemy数据的增、删、改、查
1、增:
# 增加一个数据对象:
article1 = Article(title='aaa',content='bbb')
# 数据的增删改查都用session
db.session.add(article1)
# 这样只是对事务的操作
db.session.commit()
return 'index.html'
2、查:
# select * from article wherer title = 'aaa';
# 所有的查找都是query, filter = aaa
result = Article.query.filter(Article.title == 'aaa').first()# first()取第一条数据
#返回一个query对象
# article1 = result[0]
#
# print article1.title
# print 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.title == 'new title').first()
#2.把数据删掉
db.session.delete(article1)
#3.事务提交
db.session.commit()
7、Flask-SQLAlchemy外键及其关系:
外键(一对多):
#创建文章表
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(100),nullable=False)
# psaaword = db.Column(db.String(100),nullable=False)
#创建用户表
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
title = db.Column(db.String(100),nullable=False)
#创建外键`db.ForeignKey`
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
author = db.relationship('User', backref = db.backref('articles') )
解释! author = db.relationship(‘User’, backref = db.backref(‘articles’) )
1)给Article
添加了一个author
属性,可以访问这篇文章的作者的数据,就像访问普通模型一样。
2)backref
是定义反向引用,可以通过User.article
访问这个模型所写的所有文章
外键-多对多
以CSDN博客为例,一片博客可对应多个标签,一个标签也可以对应该标签类型下的多个博客,多博客对多标签的情况就是“多对多”。
多对多关系要通过一个中间表来实现。
中间表不能通过class
实现,只能通过db.table
来实现。
设置关联:tags = db.relationship('Tag',secondary = article_tag,backref = db.backref('articles'))
【其中:用
secondary = 中间表
进行关联】
访问和添加数据可以用一下方式进行操作:
——添加数据
article1 = Article(title = 'aaa')
article2 = Article(title = 'bbb')
tag1 = Tag(name = '111')
tag2 = Tag(name = '222')
article1.tags.append(tag1)
article1.tags.append(tag2)
article2.tags.append(tag1)
article2.tags.append(tag2)
db.session.add(article1)
db.session.add(article2)
db.session.add(tag1)
db.session.add(tag2)
db.session.commit()
####第一步(添加数据)已完成
——访问数据,多对多应用实例:
####例如####
####拿到文章标题为aaa的文章 ->->->->-> 想知道这篇文章有哪些标签
article1 = Article.query.filter(Article.title == 'aaa').first()
tags = article1.tags
for tag in tags:
print tag.name