flask中使用SQLAlchemy进行辅助开发的代码【分分快

作者:编程技术

5.使用sqlalchemy

from app import db
#创建模型对象
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

def __repr__(self):
    return '<User %r>' % self.username

# 1.创建表
db.create_all()

# 2.增加记录
admin = User(username='admin', email='admin@example.com')
guest = User(username='guest', email='guest@example.com')
db.session.add(admin)
db.session.add(guest)
db.session.commit()

#3.查询记录,注意查询返回对象,如果查询不到返回None
User.query.all() #查询所有
User.query.filter_by(username='admin').first()#条件查询
User.query.order_by(User.username).all()#排序查询
User.query.limit(1).all()#查询1条
User.query.get(id = 123)#精确查询

# 4.删除
user = User.query.get(id = 123)
db.session.delete(user)
db.session.commit()

class AdminInfo(db.Model):
  id = db.Column(db.Integer, primary_key = True)
  name = db.Column(db.String(16))
  password = db.Column(db.String(32))
  kidname = db.Column(db.String(16))
  diy_show = db.Column(db.Text)

python更新数据库脚本两种方法,python两种方法

最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新。

第一种:使用python的MySQLdb模块利用原生的sql语句进行更新

 1 import MySQLdb
 2 #主机名
 3 HOST = '127.0.0.1'
 4 #用户名
 5 USER = "root"
 6 #密码
 7 PASSWD = "123456"
 8 #数据库名
 9 DB = "db_name"
10 # 打开数据库连接
11 db=MySQLdb.connect(HOST,USER,PASSWD,DB)
12 # 获取操作游标
13 cursor=db.cursor()
14 
15 if __name__ == '__main__':
16 
17     if cursor:
18         command_a = "update tables_one set status=5 where status=0"
19         # 使用execute方法执行SQL语句
20         cursor.execute(command_a)
21         # 提交到数据库执行
22         db.commit()
23 
24         command2 = "select field from tables_one where id =12"
25         ret2 = cursor.execute(command2)
26         # 获取所有记录列表
27         ret2=cursor.fetchall()
28         for item in ret2:
29                 command3 = "insert into tables_two(name) values (%s);" % (item[0])
30                 fin=cursor.execute(command3)
31                 db.commit()
32         # 关闭数据库连接
33         db.close()

数据库查询三种方式

  • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
  • fetchall():接收全部的返回结果行.
  • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

 

第二种:使用python的框架flask和sqlalchemy进行更新

 1 # -*- coding:utf-8 -*-
 2 from flask import Flask
 3 from flask_sqlalchemy import SQLAlchemy
 4 from sqlalchemy.sql import text
 5 
 6 HOST = '127.0.0.1'
 7 USER = "root"
 8 PASSWD = "123456"
 9 DB = "carrier_test"
10 CHARTSET = "utf8"
11 
12 app = Flask(__name__,instance_relative_config = True)
13 #链接数据库路径
14 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://%s:%[email protected]:3306/%s?charset=%s' %(USER,PASSWD,DB,CHARTSET)
15 #如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。
16 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
17 #如果设置成 True,SQLAlchemy 将会记录所有 发到标准输出(stderr)的语句,这对调试很有帮助。
18 app.config['SQLALCHEMY_ECHO'] = False
19 # 数据库连接池的大小。默认是数据库引擎的默认值 (通常是 5)。
20 app.config['SQLALCHEMY_POOL_SIZE'] = 6
21 db = SQLAlchemy(app)
22 
23 class Table_one(db.Model):
24     __tablename__ = 'table_one'
25 
26     id = db.Column('id', db.Integer, primary_key=True, autoincrement=True)
27     com_name = db.Column('com_name', db.String(30), nullable=False)
28     com_about = db.Column('com_about', db.String(200), nullable=False)
29 
30     def __repr__(self):
31         return '<table_one com_name %r>' % self.com_name
32 
33 
34 class Table_two(db.Model):
35     __tablename__ = 'table_two'
36 
37     id = db.Column('id', db.Integer, primary_key=True, autoincrement=True)
38     reason = db.Column('reason', db.String(128), nullable=True)
39     create_time = db.Column('create_time', db.TIMESTAMP, server_default=text('now()'))
40     status = db.Column('status', db.Integer, nullable=False, default=0)
41 
42     def __repr__(self):
43         return '<table_two id %r>' % self.id
44 
45 def db_commit_all(lists):
46     try:
47         db.session.add_all(lists)
48         db.session.commit()
49         return 'SUCCESS'
50     except Exception,e:
51         return 'Fail!!!'
52 
53 def commits_to_three_judge():
54     com_sta_obj = Table_one.query.filter_by(com_name='只是测试使用,不用关心表间关系').all()
55     for ite in com_sta_obj:
56         ship_obj = Table_two.query.filter_by(id=ite.id).first()
57         if ship_obj:
58             if int(ship_obj.status) == 2:
59                 ite.status = 0
60                 print db_commit_all([ite])
61     print '表同步结束'
62 
63 64 
65 if __name__=='__main__':
66     #执行更新数据库函数
67     commits_to_three_judge()

 

两种方式对比:

1.在实际项目中,数据库的更新 需要用到很多相关函数进行数据的收集,判断是否满足条件等,而这些相关函数在项目中都是用 Sqlalchemy进行数据相关操作,比如第二种方法里的db_commit_all()函数

2.使用第二种方法,直接复制这些函数到脚本中即可,如果使用第一种方法,则需要重写相关函数,增加开发时间,浪费精力。

3.如果项目中是使用flask进行开发,推荐使用第二种方法进行数据库更新。

 

Flask-SQLAlchemy中配置相关链接 

python使用MySQLdb操作mysql数据库相关连接 

最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了...

4.字段类型

类型名称 python类型 描述
Integer int 常规整型,通常为32位
SmallInteger int 短整型,通常为16位
BigInteger int或long 精度不受限整型
Float float 浮点型
Numeric decimal 定点数
String str 可变长度字符串
Text str 可变长度字符串,适合大量文本
Unicode unicode 可变长度Unicode字符串
Boolean bool 布尔值
Date datetime.date 日期类型
Time datetime.time 时间类型
DateTime datetime.datetime 日期时间类型
Interval datetime.timedate 时间间隔
Enum str 字符列表
PickleType 任意Python对象 自动Pickle序列化
LargeBinary str 二进制

  def __repr__(self):
    return "<name: %s  pw: %s>"%(self.name, '*'*len(self.password))

6.具体实例代码可以看我的git有个flask requests爬取小说展示项目

app = flask.Flask(__name__)
# - Settings里配置了SqlAlchemy的数据库地址
# sqlite ex: "sqlite:///dbname.db"
app.config.from_object("Settings")
db = SQLAlchemy(app)
db.init_app(app)
# - create_all() 调用时将会创建所有继承db.Model的模版
# Model ex: 见 Class AdminInfo
db.create_all()

2.使用Flask-SQLAlchemy

Flask-SQLAlchemy数据库URL
常用的数据库引擎:

数据库引擎 URL
MySql mysql pymysql://username:password@host/database
Postgres postgresql://username:password@host/database

app.py编辑

#导入模块
from flask_sqlalchemy import SQLAlchemy
import pymysql

#创建flask对象
app = Flask(__name__)

#配置flask配置对象中键:SQLALCHEMY_DATABASE_URI

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql pymysql://username:password@hostname/database"

#配置flask配置对象中键:SQLALCHEMY_COMMIT_TEARDOWN,设置为True,应用会自动在每次请求结束后提交数据库中变动

app.config['SQLALCHEMY_COMMIT_TEARDOWN'] = Ture
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

#获取SQLAlchemy实例对象,接下来就可以使用对象调用数据

db = SQLAlchemy(app)

复制代码 代码如下:

3.sqlalchemy列常见参数

选择项 说明
autoincrement True 是否自增
primary_key True 是否是主键
indexE TRUE 是否是索引
unique True 是否是唯一
nullable True 是否允许字段为空
default 默认值

复制代码 代码如下:

基于flask requests小说爬取项目

# 如果进行查询
AdminInfo.query.all()
# >>> [<name: gaoyiping  pw: *********>, ]
AdminInfo.query.get(1) # 查询刚插入的第一条记录
# >>> <name: gaoyiping  pw: *********>
AdminInfo.query.filter_by(name = "gaoyiping")
# >>> <name: gaoyiping  pw: *********>

环境说明

Centos7   python3.6   mysql5.7

1)、apt-ge安装

1.安装Flask-SQLAlchemy,pymyql驱动

pip install flask-sqlalchemy
pip intall pymysql

安装方法

2)、下载安装包进行安装

这样就是就可以在render 模版时使用SQLAlchemy了。

  def __init__(self, name, password, kidname, diy_show):
    self.name = name
    self.password = password
    self.kidname = kidname
    self.diy_show = diy_show

复制代码 代码如下:

# 安装后可直接在py中使用
import flask
from flask.ext.sqlalchemy import SQLAlchemy

# 对AdminInfo进行操作
ai = AdminInfo("gaoyiping", "gaoyiping", u"我叫高一平", u"大家好,我叫高一平,你叫什么?我们交个朋友啊。")
# 这样就已经实例了一个SQL Data
# 对db进行插入
db.session.add(ai)
# 对db commit
db.session.commit()

您可能感兴趣的文章:

  • Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
  • 在Python程序和Flask框架中使用SQLAlchemy的教程
  • Python的Flask框架中SQLAlchemy使用时的乱码问题解决
  • 在Python的Flask框架下使用sqlalchemy库的简单教程
  • Flask SQLAlchemy一对一,一对多的使用方法实践
  • Python利用flask sqlalchemy实现分页效果

sudo apt-get install Flask-SQLAlchemy

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划