在python3下怎样用flask-sqlalchemy对mysql数据库操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python3下怎样用flask-sqlalchemy对mysql数据库操作相关的知识,希望对你有一定的参考价值。

以 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 http://peak.telecommunity.com/dist/ez_setup.py

python ez_setup.py
4.MySQL-Python
代码如下:
easy_install MySQL-Python

5.SQLAlchemy
代码如下:
easy_install SQLAlchemy

6、安装完成后使用下面代码测试连接
代码如下:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

DB_CONNECT_STRING = \'mysql+mysqldb://root:123@localhost/ooxx?charset=utf8\'
engine = create_engine(DB_CONNECT_STRING, echo=True)
DB_Session = sessionmaker(bind=engine)
session = DB_Session()

7、数据操作(增删改查)
代码如下:
from sqlalchemy import func, or_, not_

user = User(name=\'a\')
session.add(user)
user = User(name=\'b\')
session.add(user)
user = User(name=\'a\')
session.add(user)
user = User()
session.add(user)
session.commit()

query = session.query(User)
print query # 显示SQL 语句
print query.statement # 同上
for user in query: # 遍历时查询
print user.name
print query.all() # 返回的是一个类似列表的对象
print query.first().name # 记录不存在时,first() 会返回 None
# print query.one().name # 不存在,或有多行记录时会抛出异常
print query.filter(User.id == 2).first().name
print query.get(2).name # 以主键获取,等效于上句
print query.filter(\'id = 2\').first().name # 支持字符串

query2 = session.query(User.name)
print query2.all() # 每行是个元组
print query2.limit(1).all() # 最多返回 1 条记录
print query2.offset(1).all() # 从第 2 条记录开始返回
print query2.order_by(User.name).all()
print query2.order_by(\'name\').all()
print query2.order_by(User.name.desc()).all()
print query2.order_by(\'name desc\').all()
print session.query(User.id).order_by(User.name.desc(), User.id).all()

print query2.filter(User.id == 1).scalar() # 如果有记录,返回第一条记录的第一个元素
print session.query(\'id\').select_from(User).filter(\'id = 1\').scalar()
print query2.filter(User.id > 1, User.name != \'a\').scalar() # and
query3 = query2.filter(User.id > 1) # 多次拼接的 filter 也是 and
query3 = query3.filter(User.name != \'a\')
print query3.scalar()
print query2.filter(or_(User.id == 1, User.id == 2)).all() # or
print query2.filter(User.id.in_((1, 2))).all() # in

query4 = session.query(User.id)
print query4.filter(User.name == None).scalar()
print query4.filter(\'name is null\').scalar()
print query4.filter(not_(User.name == None)).all() # not
print query4.filter(User.name != None).all()

print query4.count()
print session.query(func.count(\'*\')).select_from(User).scalar()
print session.query(func.count(\'1\')).select_from(User).scalar()
print session.query(func.count(User.id)).scalar()
print session.query(func.count(\'*\')).filter(User.id > 0).scalar() # filter() 中包含 User,因此不需要指定表
print session.query(func.count(\'*\')).filter(User.name == \'a\').limit(1).scalar() == 1 # 可以用 limit() 限制 count() 的返回数
print session.query(func.sum(User.id)).scalar()
print session.query(func.now()).scalar() # func 后可以跟任意函数名,只要该数据库支持
print session.query(func.current_timestamp()).scalar()
print session.query(func.md5(User.name)).filter(User.id == 1).scalar()

query.filter(User.id == 1).update(User.name: \'c\')
user = query.get(1)
print user.name

user.name = \'d\'
session.flush() # 写数据库,但并不提交
print query.get(1).name

session.delete(user)
session.flush()
print query.get(1)

session.rollback()
print query.get(1).name
query.filter(User.id == 1).delete()
session.commit()
print query.get(1)
参考技术A 这个问题经常难道新手一下,因为大部分教程里(包括经典的《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
就可以了。本回答被提问者采纳

怎样用python实现网页自动登录?

参考技术A

可以在cmd下通过命令安装selenium模块:pip install selenium 或者 easy_install selenium。

分析网页控件id: 
 

# -*- coding: utf-8 -*-

import os

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

iedriver = "C:\\Program Files\\Internet Explorer\\IEDriverServer.exe"

os.environ["webdriver.ie.driver"] = iedriver  #调用IE浏览器

browser = webdriver.Ie(iedriver)

browser.get('http://weibo.com/')  #需要打开的网址

user = browser.find_element_by_id("loginname") #审查元素username的id

user.send_keys("11111")  #输入账号

password = browser.find_element_by_name("password") #审查元素password的name

password.send_keys("1234")  #输入密码

password.send_keys(Keys.RETURN) #实现自动点击登陆

print('登陆成功')

以上是关于在python3下怎样用flask-sqlalchemy对mysql数据库操作的主要内容,如果未能解决你的问题,请参考以下文章

在python3下怎样用flask-sqlalchemy对mysql数据库操作

在python3下怎样用flask-sqlalchemy对mysql数据库操作

在python3下怎样用flask-sqlalchemy对mysql数据库操作

在python3下怎样用flask-sqlalchemy对mysql数据库操作

在python3下怎样用flask-sqlalchemy对mysql数据库操作

在python3下怎样用flask-sqlalchemy对mysql数据库操作