flask mysql 1366_2017-11-17 Python Flask Script+mysql环境设置

【1.初级版】

flask-scrpit安装。

使用flask-scrpit可以创建命令,并在Flask的应用上下文中执行,因为这样才能对Flask对象进行修改。Flask Script自带了一些默认的命令,可以运行服务器或者开启带应用上下文的Python命令行。

env) D:\python\flask>pip install flask-script

Collecting flask-script

Downloading Flask-Script-2.0.6.tar.gz (43kB)

47% |███████████████▏ | 20kB 166kB/s eta 0:00

71% |██████████████████████▉ | 30kB 221kB/s e

94% |██████████████████████████████▍ | 40kB 1

100% |████████████████████████████████| 51kB

218kB/s

Requirement already satisfied: Flask in d:\python\flask\env\lib\site-packages (f

rom flask-script)

Requirement already satisfied: Werkzeug>=0.7 in d:\python\flask\env\lib\site-pac

kages (from Flask->flask-script)

Requirement already satisfied: itsdangerous>=0.21 in d:\python\flask\env\lib\sit

e-packages (from Flask->flask-script)

Requirement already satisfied: click>=2.0 in d:\python\flask\env\lib\site-packag

es (from Flask->flask-script)

Requirement already satisfied: Jinja2>=2.4 in d:\python\flask\env\lib\site-packa

ges (from Flask->flask-script)

Requirement already satisfied: MarkupSafe>=0.23 in d:\python\flask\env\lib\site-

packages (from Jinja2>=2.4->Flask->flask-script)

Building wheels for collected packages: flask-script

Running setup.py bdist_wheel for flask-script ... done

Stored in directory: C:\Users\test003\AppData\Local\pip\Cache\wheels\35\38\2a\

5a4aef4aa51913c135f5d2ff6f8552ad0db06667cd3e48ef2d

Successfully built flask-script

Installing collected packages: flask-script

Successfully installed flask-script-2.0.6

安装成功,开始写脚本。

from flask_script import Manager, Server

from main import app

然后把你的app传给Manager对象,以初始化Flask Script:

manager = Manager(app)

现在我们来添加一些命令。这里运行的服务器跟通过main.py运行的普通开发服务器是一样的。make_shell_context函数会创建一个Python命令行,并且在应用上下文中执行。返回的字典告诉Flask Script在打开命令行时进行一些默认的导入工作。

manager.add_command("server", Server())

@manager.shell

def make_shell_context():

return dict(app=app)

通过manage.py运行命令行在将来会十分必要,因为一些Flask扩展只有在Flask应用对象被创建之后才会被初始化。直接运行默认的Python命令行会令这些扩展返回错误。

然后,在文件结尾添加如下代码,这是Python的标准方式,用来限制仅在用户直接运行文件的时候,才执行上面的代码:

if __name__ == "__main__":

class Config(object):

pass

class ProdConfig(Config):

pass

class DevConfig(Config):

DEBUG = True

from flask import Flask

from config import DevConfig

app = Flask(__name__)

app.config.from_object(DevConfig)

@app.route('/')

def home():

return '

Hello World!

'

if __name__ == '__main__':

app.run()

[运行服务器]

D:\python\flask>env\Scripts\activate

(env) D:\python\flask>python example2\manage.py server

* Restarting with stat

* Debugger is active!

* Debugger PIN: 104-739-710

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

[命令行方式连接]

D:\python\flask>env\Scripts\activate

(env) D:\python\flask>python example2\manage.py shell

>>> app

>>>

以上,Flask和Flask-script安装,运行完成。

【2.进阶版-数据库连接】

安装Flask SQLAlchemy。SQLAlchemy在最底层包装了数据库操作接口,在最上层提供了对象关系映射(ORM)。ORM是在基于不同的数据结构和系统类型的数据源之间传递和转换数据的技术。在这里,它用来把大量不同类型的数据库中的数据,转换成python对象的集合。同时,像Python这样的语言,允许你在不同的对象之间建立引用,读取和设置它们的属性;而SQLAlchemy这样的ORM,能为你将对象操作转换为传统的数据库操作。

(env) D:\python\flask>pip install flask-sqlalchemy

Collecting flask-sqlalchemy

Downloading Flask_SQLAlchemy-2.3.2-py2.py3-none-any.whl

Collecting SQLAlchemy>=0.8.0 (from flask-sqlalchemy)

Downloading SQLAlchemy-1.1.15.tar.gz (5.2MB)

38% |████████████▏ | 2.0MB 46kB/s eta 0:01:10

...省略...

99% |████████████████████████████████| 5.2MB

100% |████████████████████████████████| 5.2M

B 28kB/s

Requirement already satisfied: Flask>=0.10 in d:\python\flask\env\lib\site-packa

ges (from flask-sqlalchemy)

Requirement already satisfied: Werkzeug>=0.7 in d:\python\flask\env\lib\site-pac

kages (from Flask>=0.10->flask-sqlalchemy)

Requirement already satisfied: click>=2.0 in d:\python\flask\env\lib\site-packag

es (from Flask>=0.10->flask-sqlalchemy)

Requirement already satisfied: Jinja2>=2.4 in d:\python\flask\env\lib\site-packa

ges (from Flask>=0.10->flask-sqlalchemy)

Requirement already satisfied: itsdangerous>=0.21 in d:\python\flask\env\lib\sit

e-packages (from Flask>=0.10->flask-sqlalchemy)

Requirement already satisfied: MarkupSafe>=0.23 in d:\python\flask\env\lib\site-

packages (from Jinja2>=2.4->Flask>=0.10->flask-sqlalchemy)

Building wheels for collected packages: SQLAlchemy

Running setup.py bdist_wheel for SQLAlchemy ... done

Stored in directory: C:\Users\test003\AppData\Local\pip\Cache\wheels\

b67f1ab4d5a08d3c3ad3edfc1e60e09f9263536aa3dc91824c

Successfully built SQLAlchemy

Installing collected packages: SQLAlchemy, flask-sqlalchemy

Successfully installed SQLAlchemy-1.1.15 flask-sqlalchemy-2.3.2

class Config(object):

pass

class ProdConfig(Config):

pass

class DevConfig(Config):

DEBUG = True

SQLALCHEMY_DATABASE_URI = "mysql://root:666666@localhost/mytest"

这个数据库连接方式,当时是看攻略写的,并不了解背后知识,结果后面有很大的麻烦。

2.main_mysql.py文件

from config import DevConfig

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config.from_object(DevConfig)

db = SQLAlchemy(app)

class User(db.Model):

#SQLAlchemy会假设你的表名就模型类型的小写版本。这个例子里,表名就是user。

#但是,如果你想给表起个别的名字,你可以给类添加'__tablename__'的类属性。

##另外,通过采用这种方式,你也可以使用在数据库中已经存在的表,只需把表名设为该属性的值:

##__tablename__ = 'user_table_name'

id = db.Column(db.Integer(), primary_key=True)

username = db.Column(db.String(255))

password = db.Column(db.String(255))

def __init__(self, username):

self.username = username

def __repr__(self):

return "".format(self.username)

from flask_script import Manager, Server

from main_mysql import app, db, User

#把你的app传给Manager对象,以初始化Flask Script:

manager = Manager(app)

#现在我们来添加一些命令。这里运行的服务器跟通过main.py运行的普通开发服务器是一样的。

#make_shell_context函数会创建一个Python命令行,并且在应用上下文中执行。

#返回的字典告诉Flask Script在打开命令行时进行一些默认的导入工作。

manager.add_command("server", Server())

@manager.shell

def make_shell_context():

#return dict(app=app)

#注意:每新增一个模型,都会在这个地方导入并添加到dict中。

return dict(app=app, db=db, User=User)

#通过manage.py运行命令行在将来会十分必要,因为一些Flask扩展只有在Flask应用对象被创建之后才会被初始化。直接运行默认的Python命令行会令这些扩展返回错误。

#然后,在文件结尾添加如下代码,这是Python的标准方式,用来限制仅在用户直接运行文件的时候,才执行上面的代码:

if __name__ == "__main__":

[运行服务器]

(env) D:\python\flask\example2>python manage.py server

D:\python\flask\env\lib\site-packages\flask_sqlalchemy\__init__.py:794: FSADepre

cationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this

warning.

'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '

* Restarting with stat

D:\python\flask\env\lib\site-packages\flask_sqlalchemy\__init__.py:794: FSADepre

cationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this

warning.

'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '

* Debugger is active!

* Debugger PIN: 104-739-710

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

[运行客户端]

env) D:\python\flask\example2>python manage.py shell

D:\python\flask\env\lib\site-packages\flask_sqlalchemy\__init__.py:794: FSADepre

cationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will

be disabled by default in the future. Set it to True or False to suppress this

warning.

'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '

>>> db.create_all()

...省略...

File "D:\python\flask\env\lib\site-packages\sqlalchemy\dialects\mysql\mysqldb.

py", line 110, in dbapi

return __import__('MySQLdb')

ImportError: No module named 'MySQLdb'

执行db.create_all()出错了。查攻略,缺少mysql的python连接库。好吧,开始下载mysql-python库。。

(env) D:\python\flask\example2>pip install mysql-python

...省略...

error: Microsoft Visual C++ 10.0 is required. Get it with "Microsoft Windows S

----------------------------------------

Failed building wheel for mysql-python

Running setup.py clean for mysql-python

Failed to build mysql-python

Installing collected packages: mysql-python

Running setup.py install for mysql-python ... error

又出错了,缺少C++类库。好吧,下载winsdk_web.exe。再安装。

又出错了,有完没完,缺少framework4。再下载,dotNetFx40_Full_x86_x64,安装,总算不报错了。

现在可以安装winsdk_web.exe,需要n久时间,慢慢等吧。

趁这段时间,补一下python和mysql连接的知识吧,查了一篇文章https://www.zhihu.com/question/29719547,终于搞明白了。原来有2种方式,我现在用的是第一种,mysql-python库。连接代码,SQLALCHEMY_DATABASE_URI = "mysql://root:666666@localhost/mytest"

另外一种是pymysql库,反正现在winsdk_web.exe安装等待中,尝试一下吧。

(env) D:\python\flask>pip install pymysql3

...省略...

Successfully built pymysql3

Installing collected packages: pymysql3

Successfully installed pymysql3-0.5

config.py文件中,修改代码如下:

SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:666666@localhost/mytest"

再运行db.create_all(),不报错了。

去mysql的mytest数据库,show tables,user表创建成功了~~~

以前从来没有研究过python连接mysql数据库,所以没有经验。不然不会那么折腾了,直接用pymysql方式简单多了。果断放弃winsdk_web.exe安装,等以后有空再尝试mysql-python库。

【后续】

shell中再运行了几个命令

增加数据

>>> user = User(username='fake_name')

>>> db.session.add(user)

>>> db.session.commit()

读取数据

>>> users = User.query.all()

>>> users

[]

修改数据

>>> User.query.filter_by(username='fake_name').update({'password':'test'})

1

>>> db.session.commit()

删除数据

>>> user = User.query.filter_by(username='fake_name').first()

>>> db.session.delete(user)

>>> db.session.commit()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vuex 的模块化+命名空间

一、目的:让代码更好维护,让多种数据分类更加明确 二、修改 store.js const person {namespaced: true; // 开启命名空间state: {},getters: {},actions: {},mutations: {} }const count {namespaced: true; // 开启命名空间state: {},getters: {},ac…

idea中常用的快捷键以及一些奇淫技巧 , 加快我们的开发效率

idea中常用的快捷键以及一些奇淫技巧 , 加快我们的开发效率 !!! 知道类名查找你本地以的类 (你pom中依赖的类你自己创建的类)------------- ctrlshiftt 修改你创建的变量 以及你后面都引用的变量 &#x…

apache2 php mysql_二、Linux服务器apache2+PHP7+mysql环境配置

关于网站搭建的基础知识,请见我的另一篇文章https://www.jianshu.com/p/9c65fcb14e4f此处不加赘述。本文仅介绍Linux服务器环境的配置。一、安装包下载与安装1.安装apache2sudo apt-get install apache22.安装PHP//-y的意思是全部默认选择yes//8条命令分8次输入//1s…

前端给后端传递数据的时候,有些后端自己可以获取到的值应该由前端传递吗?

前端给后端传递数据的时候,有些后端自己可以获取到的值应该由前端传递吗? 场景: 1.比如我向后端传递一个学生做的试卷. 2.后端需要我把学生的答案和标准答案(在获取试卷的时候给我的,我知道很扯淡)同时传递给他. 我认为标准答案没必要传给他 ,因为他可以根据我传给他的试卷…

mysql备份去掉一个库_MySQL备份与恢复(3)mysqldump备份多个库

一、mysqldump的工作原理、利用mysqldump命令备份数据的过程,实际上就是把数据从mysql库以逻辑的sql语句的形式直接输出或生成备份的文件的过程利用这个备份文件恢复的时候的原理?就是把备份的sql命令再执行一遍。二、备份多个库mysql>show databases…

关于引入 js 文件

一、说说 script 标签的几个常用属性 async 表示立即下载该 js 文件,但不妨碍页面中的其他操作(只对外部 js 文件有效)defer 表示该 js 文件可以延迟到整个页面被解析并显示之后再执行(只对外部 js 文件有效)src 指定…

mysql where条件使用了or会不会扫全表

mysql where条件使用了or会不会扫全表 是的 但是使用索引在某些情况下可以避免的: 1、where 语句里面如果带有or条件, myisam表能用到索引, innodb不行。 2、必须所有的or条件都必须是独立索引 3、用UNION替换OR (适用于索引列) 4、用in来替换or 不管用不…

mysql 数据库 文件夹_mysql 数据库 文件夹

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

JS 深浅拷贝

在日常开发当中那面会遇到对象拷贝问题 一、对象浅拷贝(shallowClone) 使用 Object.assign 把源对象自身的、可枚举的属性拷贝到目标对象上 var person {name: 张三,age: 18,sex: 男,hobbies: [篮球, 足球, 排球],sayName: function () {console.log(t…

mysql事务回滚后,自增ID仍然增加

事务回滚后,自增ID仍然增加 回滚后,自增ID仍然增加。 比如当前ID是7,插入一条数据后,又回滚了。 然后你再插入一条数据,此时插入成功,这时候你的ID不是8,而是9. 因为虽然你之前插入回滚&#…

mysql is needed by_libnuma.so.1()(64bit) is needed by mysql-community-server-5.7.9-1.el6.x86_64

今天在安装 MYSQL -5.7.9的时候,rpm -Uvh mysql-community-server-5.7.9-1.el6.x86_64.rpm提示:warning: mysql-community-server-5.7.9-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEYerror: Failed dependencies:libnuma.so…

MySQL 查询速度慢与性能差的原因与解决方法

MySQL 查询速度慢与性能差的原因与解决方法 更新时间:2019年09月26日 18:05:47 作者:Microtiger 随着网站数据量与访问量的增加,MySQL 查询速度慢与性能差的问题就日渐明显,这里为大家分享一下解决方法,需要的朋友可以参考下 一…

重写JS数组常用方法

Array.prototype.forEach 没有返回值 参数1:遍历数组时需要执行的回调函数 回调函数参数1:数组的每一项 item回调函数参数2:每一项的下标 index回调函数参数3:整个数组 array 参数2:这个回调函数的 this 指向 Array.pr…

mysql 时间戳 2038_mysql数据库的timestamp为什么从1970到2038的某一时间?某一时间是指什么时间?过了这个时间之后怎么办?-问答-阿里云开发者社区-阿里云...

首先你要理解什么是时间戳。时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至某一时间点的总秒数。例如北京时间2015-12-31 17:00:00的时间戳是1451552400,就是指从北京时间1970-01-01 08:00:00到2015-12-31 17:00:00已经…

MySQL 批量插入数据,单次插入多少条数据效率最高

文章目录一、前言二、批量插入前准备1、插入到数据表的字段2、计算一行字段占用的空间3、在数据里做插入操作的时候,整体时间的分配三、批量插入数据测试1、SQL语句的大小限制2、查看服务器上的参数:3、计算一次能插入的最大行记录4、测试插入数据比对&a…

重写 typeof 方法

重写 typeof 方法 function myTypeof(str) {var toStr Object.prototype.toString,typeofStr typeof(str),typeTemp {[object Object]: object, // 检测对象[object String]: object-string, // 检测包装类 String[object Number]: object-number, // 检测包装类 Number[ob…

mysql+跨服务器+写入_MySQL中使用FREDATED引擎实现跨数据库服务器、跨实例访问

跨数据库服务器,跨实例访问是比较常见的一种访问方式,在Oracle中可以通过DB LINK的方式来实现。对于MySQL而言,有一个FEDERATED存储引擎与之相对应。同样也是通过创建一个链接方式的形式来访问远程服务器上的数据。本文简要描述了FEDERATED存…

MYSQL避免全表扫描__如何查看sql查询是否用到索引(mysql)

MYSQL避免全表扫描 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描 如:select id f…

字符串数组排序

字符串数组排序 var arr [chifan, 抽yan, he酒, 烫头, Coding2233];/*** 计算字符串字节数*/ function getBytesCount(str) {var bytesCount str.length;for (var i 0; i < bytesCount; i) {var ASCIINum str.charCodeAt(i);ASCIINum > 255 && bytesCount;}…

mysql主键unsigned_mysql – 主键应该总是unsigned?

MySQL支持可选的SERIAL数据类型(假定与PostgreSQL兼容&#xff0c;因为SERIAL不是标准的ANSI SQL)。此数据类型只是创建BIGINT UNSIGNED的简写。去试试吧&#xff1a;CREATE TABLE test.foo (foo_id SERIAL PRIMARY KEY);SHOW CREATE TABLE test.foo;CREATE TABLE test.foo (fo…