1. 我觉得 flask-sqlalchemy 的实现是不是有其局限性
flask-sqlalchemy把它的执行上下文绑定在了flask的app的context上。
但sqlalchemy本身提供了scoped_session.
如果把一个线程看成一个目录,那么其下有app.context栈和sqlalchemy.scoped_session2个资源。
现在他的实现,把sqlalchemy.scoped_session的资源放在了app.context栈下。
如果需要自己起个worker线程来处理redis的消息并写入数据库,那么flask-sqlalchemy的db对象就没有办法在自己的线程里执行了。
<a target="_blank" href="mailto:%E7%9B%B8%E5%8F%8D%E5%A6%82%E6%9E%9C%E6%8A%8Adb%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%92%8Capp%E7%9A%84context%E8%84%B1%E7%A6%BB%E5%BC%80%E6%9D%A5%EF%BC%8C%E5%B0%B1%E7%81%B5%E6%B4%BB%E5%A4%9A%E4%BA%86%E3%80%82%E5%8F%8D%E6%AD%A3%E5%8F%AA%E8%A6%81%E6%B3%A8%E5%86%8C%E4%B8%80%E4%B8%8B@<a href=" member="" app"="" style="color: rgb(119, 128, 135); text-decoration: none; word-break: break-all; font-family: 'Helvetica Neue', 'Luxi Sans', 'DejaVu Sans', Tahoma, 'Hiragino Sans GB', 'Microsoft Yahei', sans-serif; line-height: 22.4px; white-space: normal; background-color: rgb(255, 255, 255);">app.xn--teardown_appcontext,session-8x78c.xn--remove()ok-3m3p752k.">相反如果把db的实现和app的context脱离开来,就灵活多了。反正只要注册一下@app.teardown_appcontext,把session.remove()就ok了。
2. flask-sqlalchemy怎么用原生sql语句
接着就从安装开始介绍吧,以 Debian/Ubuntu 为例(请确保有管理员权限):
1.MySQL
复制代码代码如下:
apt-get install mysql-server
apt-get install mysql-client
apt-get install libmysqlclient15-dev
2.python-mysqldb
复制代码代码如下:
apt-get install python-mysqldb
3.easy_install
复制代码代码如下:
wget eak.telecommunity.com/dist/ez_setup.py
python ez_setup.py
4.MySQL-Python
复制代码代码如下:
easy_install MySQL-P
3. flask-SQLAlchemy 的 update 操作是怎么用的呢
推荐Flask Web Development这本书,循序渐进每一小节都有git tag,很方便看代码。
不要太关注细节,如你提到的wsgi,先整体,后细节,而疑惑就需要自己进入源码找答案了。
要深入学习还是需要看源码,了解flask的原理。比如context,request, session的原理;如何增加模板filter,如何注入方法;flask_sqlalchemy的db session也是构建在context上,具体原理;flask_cache的细节,memoize如何通过类方法清空实例方法的cache;jinja2的filter.py中的filter是否熟悉,bccache是否对你有用,深入了解模板原理。
当遇到阻塞请求,如调用外部api时,如何提高系统吞吐量;用flask如何实现长连接(Comet)。。。(借助gevent,想明白后你就会发现其实tornado最有优势的优点其实不过如此)
其实单纯的一个框架是有限的,难点在于如何和其它组件更好更高效的工作。
4. 新手求教 python3 用 flask-sqlalchemy pymysql 连接 mysql
这个问题经常难道新手一下,因为大部分教程里(包括经典的《Flask
Web开发》一书),告诉了我们如何使用flask-sqlalchemy操作sqlite,但在生产环境(线上网站)上,我们肯定是使用MySQL或其
他,而大部分的教程里,又告诉我们flask-sqlalchemy使用MySQL的方式是:
mysql://username:password@server/db
结果我们照葫芦画瓢的来一下,发现压根不行,写好的网站一跟数据库沾边就报错。
Python和MySQL是“两个国家的人”,他们互不相通,因而需要一个中间代理,让双方互通有无,跟翻译一样(这比喻不准确,但足够你明白意思就行)。翻译又有很多选择,不同的翻译各有特色。
题
主解决问题选择的翻译是“flask-mysqldb”,其背后的主子是“MySQL-python”。恩,说到这里你应该知道,“flask-xxx”
这样的包都是对背后主子进行了适合Flask封装的插件,跟包子皮一样,里面的馅才是重点,“flask-mysqldb”的馅是“MySQL-
python”。
而我要推荐的是另一个翻译:PyMySQL,这玩意的好处是可以做异步(“MySQL-python”也可以,个人口味罢了),简而言之,网站访问量大了就需要考虑异步,现在别管这是啥子。这玩意的安装方式是:
pip install PyMySQL
之后,数据库连接由:
mysql://username:password@server/db
改为
mysql+pymysql://username:password@server/db
就可以了
5. flask-sqlalchemy怎么对数据库已有表添加数据啊
#看例子:node = Node()node.name = 'name'db.session.add(node)db.session.flush() # 主要是这里,写入数据库,但是不提交this_id = node.id # 这样就可以获得自增id了db.session.commit()
6. flask-SQLAlchemy怎么添加多对多数据
在model里面写上这个: def query_user_id(self, mac_id): obj = self.filter_by(mac_id=mac_id).first() return obj.user_id 下面是调用的地方: user_id = User.query.query_user_id(mac_id) 当然,上面只是一条记录
7. 用flask或django还需要防sql注入吗
sql注入跟你使用什么框架没有关系,但是如果是你使用了django自带的orm或者sqllachemy来连接数据库,一般可以降低被注入的危险。
如果解决了您的问题请采纳!
如果未解决请继续追问
8. 在python3下怎样用flask-sqlalchemy对mysql数据库操作
假设你已经安装了sqlalchemy和mysql数据库
1、Python中安装pymysql3扩展
pip pymysql3
(sqlalchemy只是个ORM,针对不同数据库需要安装数据库链接服务)
2、代码中添加:
import pymysql
pymysql.install_as_MySQLdb()
3、用于链接的链接字符串是:
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost/DBName'
db=SQLAlchemy(app)
4、这样就可以连上mysql 了,需要注意的是用 sqlalchemy创建的实体,
需要现在mysql中运行
CREATE Database dbname
创建数据库
再在python的shell中运行db.create_all()
才能创建表
否则会提示找不到数据库错误