mysql配置及问题
前面三份博客的笔记基本记录了所用到的基本操作,这里开始记录后台和数据库的交互,数据库我们用的是mysql然后的话mysql就不记录了因为很简单,要是没有安装学习的话,基本在网上找找学学就明白了,下面进入正题。
在flask中配置mysql前提是我们已经在mysql中创建了一个数据库来供给我们这个flask专门的database我们创建了db_demo1这个数据库。
然后对于mysql的要求就这么多,接着我们来到之前的 config 文件中对后台数据库的链接进行配置。
DIALECT = 'mysql' # 数据库 mysql
DRIVER = 'pymysql' # 驱动 mysqldb
USERNAME = 'root'
PASSWORD = 'root'
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
之前在config中只配置了一个 debug=true就没有了,这是紧接着那个配置的,然后主要是倒数第二行那排声明了各种事宜,有一点需要注意pymysql需要另外再安装一下,在python2中用的是mysqldb,如果在3中使用的话可能会报错,基本已经在3中淘汰了。现在都用pymysql,其他的都是翻译过来的意思,根据自己电脑的设置配置一下就可以了。
config配置好之后我们来到主项目中进一步配置。
db = SQLAlchemy(app)
来引用数据库
db.create_all()
加在它的下面直接运行如果成功运行,证明数据库连接成功。
数据库基本操作
创建数据库表单
数据库的表单如果对应到我们的代码中,可以看成是一个类,所以通过创建类,来创建表单实现一一对应。
class Article(db.Model):
__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.session.commit() # 提交所修改的内容很重要一定要加
这里我们创建了一个类对象在数据库中对应创建了一个table名字为article
- 列名用 db.Colunm()
- int用 db.Interger
- 主键用primary_key=True
- varchar用db.String(?)
- text用db.Text
- not null 用 nullable=False
重新启动之后进入一下首页后,到数据库中看一下表单是否创建成功
可以看到成功创建了规定的表单。
增
数据库增加记录操作,实例化一个对象然后记得commit一下就行了
article1 = Article(title='aaa',content='bbb')
db.session.add(article1)
db.session.commit()
第一行是实例化一个对象,然后对于这个对象,我们需要把它存到数据库,就利用 db.session.add方法就行了,后面的commit一定不能忘,如果用过git一般都知道。
查
查 利用Article中继承的query中的filter过滤器来查找两种方式
#方式一
result = Article.query.filter(Article.title == 'yyl').all()
article2 = result[0]
#方式二
article2 = Article.query.filter(Article.title == 'yyl').first()
如果玩过爬虫,应该都清楚一般查找任何东西返回来的都是一个list表单,所以我们实际需要的值在表单里面,用索引或者直接用first方法就行了,实例化了article2之后随便处理都可以。
改
改操作,线找到,然后对于这个找到的直接修改 之后commit一下
article2 = Article.query.filter(Article.title == 'aaa).first()
article2.content = 'ccc'
因为找到数据库,就相当于是引用了那块内存,修改直接对其生效,相当于数据库中的更新操作。
删
删除操作 先查询到然后 调用db.session.delete
article1 = Article.query.filter(Article.id == 4)[0]
db.session.delete(article1)
很简单,不再说明。