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

1469人阅读
python(18)
mysql(4)
1、新增用户
进入mysql命令行
mysql -u root -p123456
运行添加命令,用户root,密码123456,密码最好设置复杂一点。*.*表示所有数据库和表,可指定只能访问某个库。这里只是随便填一下。
mysql& grant select,insert,update,delete on *.* to 'root'@'8.8.8.8' Identified by ';;
查看是否添加成功
mysql& select host,user,
2、修改配置文件
vim /etc/f
找到bind-address = 127.0.0.1
注释掉这行,如:#bind-address = 127.0.0.1
3、修改falsk配置文件
127.0.0.1换成你要连接的IP,按上面的要求配置好的数据库IP就行。
mysql://root:.0.0.1/mydatabase
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:157224次
积分:2140
积分:2140
排名:第10921名
原创:60篇
转载:44篇
(1)(2)(2)(1)(1)(1)(1)(1)(2)(3)(3)(3)(1)(2)(1)(2)(2)(2)(1)(8)(2)(8)(5)(1)(4)(3)(2)(1)(3)(4)(5)(9)(15)(3)SQLAlchemy的理念是,SQL的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。一 安装 SQLAlchemy 代码如下:pip install sqlalchemy导入如果没有报错则安装成功 代码如下:&&& import sqlalchemy&&& sqlalchemy.____'0.9.1'&&&
二 使用 sqlalchemy对数据库操作1. 定义元信息,绑定到引擎 代码如下:(env)ghost@ghost-H61M-S2V-B3:~/project/flask/fsql$ Python 2.7.3 (default, Apr 10 :16) [GCC 4.7.2] on 2Type "help", "copyright", "credits" or "license" for more information.&&& from sqlalchemy import *&&& from sqlalchemy.orm import *&&& engine = create_engine('sqlite:///./sqlalchemy.db', echo=True)& # 定义引擎 &&& metadata = /Python/MetaData(engine) # 绑定元信息&&&
2.创建表格,初始化数据库
代码如下:&&& users_table = Table('users', metadata,...&&&& Column('id', Integer, primary_key=True),...&&&& Column('name', String(40)),...&&&& Column('email', String(120)))&&& &&& users_table.create() 10:03:32,436 INFO sqlalchemy.engine.base.Engine CREATE TABLE users (&&&&id INTEGER NOT NULL, &&&&name VARCHAR(40), &&&&email VARCHAR(120), &&&&PRIMARY KEY (id))&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 10:03:32,436 INFO sqlalchemy.engine.base.Engine () 10:03:32,575 INFO sqlalchemy.engine.base.Engine COMMIT&&&
执行上述代码,我们就创建 一个 users 表,有id, name, email 三个字段
代码如下:(env)ghost@ghost-H61M-S2V-B3:~/project/flask/fsql$ sqlite3 sqlalchemy.db SQLite version 3.7.13
02:05:22Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite& .tablesuserssqlite&
3. 基本操作,插入如果已经table表已经存在, 第二次运行就不许要 create了,& 使用 autoload 设置 代码如下:&&& from sqlalchemy import *&&& from sqlalchemy.orm import *&&& engine = create_engine('sqlite:///./sqlalchemy.db', echo=True)&&& metadata = /Python/MetaData(engine)&&& users_table = Table('users', metadata, autoload=True) 10:20:01,580 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("users") 10:20:01,581 INFO sqlalchemy.engine.base.Engine () 10:20:01,582 INFO sqlalchemy.engine.base.Engine PRAGMA foreign_key_list("users") 10:20:01,583 INFO sqlalchemy.engine.base.Engine () 10:20:01,583 INFO sqlalchemy.engine.base.Engine PRAGMA index_list("users") 10:20:01,583 INFO sqlalchemy.engine.base.Engine ()&&& users_tableTable('users', MetaData(bind=Engine(sqlite:///./sqlalchemy.db)), Column('id', INTEGER(), table=&users&, primary_key=True, nullable=False), Column('name', VARCHAR(length=40), table=&users&), Column('email', VARCHAR(length=120), table=&users&), schema=None)&&&
实例化一个插入句柄
代码如下:&&& i = users_table.insert()&&& i&sqlalchemy.sql.dml.Insert object at 0x31bc850&&&& print iINSERT INTO users (id, name, email) VALUES (?, ?, ?)&&& i.execute(name='rsj217', email='') 10:24:02,250 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, email) VALUES (?, ?) 10:24:02,250 INFO sqlalchemy.engine.base.Engine ('rsj217', '') 10:24:02,251 INFO sqlalchemy.engine.base.Engine COMMIT&sqlalchemy.engine.result.ResultProxy object at 0x31bce10&&&& i.execute({'name': 'ghost'},{'name': 'test'}) 10:24:57,537 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name) VALUES (?) 10:24:57,537 INFO sqlalchemy.engine.base.Engine (('ghost',), ('test',)) 10:24:57,537 INFO sqlalchemy.engine.base.Engine COMMIT&sqlalchemy.engine.result.ResultProxy object at 0x31bcd50&&&&
数据库内容为
代码如下:sqlite& select *1|rsj217|2|ghost|3|test|sqlite&
查询 删除和插入类似 都需要先实例一个 sqlalchemy.sql.dml 对象
三 使用 ORM使用 orm 就是 将 python class 与 数据库的 table 映射,免去直接写 sql 语句创建映射 代码如下:&&& class User(object):...&&&& def __repr__(self):...&&&&&&&&&&&& return '%s(%r, %r)' % (self.__class__.__name__, self.name, self.email)... &&& mapper(User, users_table)& # 创建映射&Mapper at 0x31bcfd0; User& &&& ul = User()&&& ul.name&&& print ulUser(None, None)&&& print ul.nameNone&&&
代码如下:&&& session = create_session()&&& session&sqlalchemy.orm.session.Session object at 0x31bef10&&&& query = session.query(User)&&& query&sqlalchemy.orm.query.Query object at 0x31bee50&&&& u = query.filter_by(name='rsj217').first() 10:44:23,809 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name, users.email AS users_email FROM users WHERE users.name = ?&LIMIT ? OFFSET ? 10:44:23,809 INFO sqlalchemy.engine.base.Engine ('rsj217', 1, 0)&&& u.nameu'rsj217'&&&
代码如下:&&& from sqlalchemy import *&&& from sqlalchemy.orm import *&&& engine = create_engine('sqlite:///./sqlalchemy.db')&&& metadata = /Python/MetaData(engine)&&& users_table = Table('users', metadata, autoload=True)&&& class User(object): pass... &&& mapper(User, users_table)&Mapper at 0x18185d0; User&&&& Session = sessionmaker(bind=engine)&&& session = Session()&&& u = User()&&& u.name = 'new'&&& session.add(u)&&& session.flush()&&& mit()&&&
注意建立会话的方式, sqlalchemy 的版本不同 sessionmaker 的方式更好剩下删除 关系 事物等高级操作就参考官方文档了。快速入门 & Flask-SQLAlchemy 0.16 documentation
Navigation
Flask-SQLAlchemy 的使用是有趣的,对于基本应用异常的简单,并且为大型应用扩展也
是没有困难的。要完整的指导,请查阅
类的 API 文档。
一个最小的应用
对于通常情况,只有一个 Flask 应用,你需要做的全部就是创建你的 Flask 应用,
选择加载你的配置,然后在创建 SQLALchemy 时把应用传递给它。
一旦创建,这个对象会包含 sqlalchemy 和
的所有函数和助手。此外,它还提供了一个名为 Model 的类,用于作为声明
模型时的 delarative 基类:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '&User %r&' % self.username
要创建初始的数据库,只需要在交互式 Python shell 中导入 db 对象并
方法来创建表和数据库:
&&& from yourapplication import db
&&& db.create_all()
砰,你的数据库就好了。现在来创建一些用户:
&&& from yourapplication import User
&&& admin = User('admin', '')
&&& guest = User('guest', '')
但是它们还不在数据库中,所以让我们确保它们被添加进去:
&&& db.session.add(admin)
&&& db.session.add(guest)
&&& db.session.commit()
访问数据库中的内容易如反掌:
&&& users = User.query.all()
[&User u'admin'&, &User u'guest'&]
&&& admin = User.query.filter_by(username='admin').first()
&User u'admin'&
SQLAlchemy 聚合关系型数据库和关系型数据库善于处理关系的方面。如此,我们
可以创建一个有两张互相关联的表的应用作为例子:
from datetime import datetime
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80))
body = db.Column(db.Text)
pub_date = db.Column(db.DateTime)
category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
category = db.relationship('Category',
backref=db.backref('posts', lazy='dynamic'))
def __init__(self, title, body, category, pub_date=None):
self.title = title
self.body = body
if pub_date is None:
pub_date = datetime.utcnow()
self.pub_date = pub_date
self.category = category
def __repr__(self):
return '&Post %r&' % self.title
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
def __init__(self, name):
self.name = name
def __repr__(self):
return '&Category %r&' % self.name
首先让我们创建一些对象:
&&& py = Category('Python')
&&& p = Post('Hello Python!', 'Python is pretty cool', py)
&&& db.session.add(py)
&&& db.session.add(p)
现在因为我们把 posts 声明为动态关系,并在反向引用中,它作为查询出现:
&&& py.posts
&sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x&
它的行为与通常的查询对象类似,所以我们可以用它获取与我们测试的“Python”分类
关联的所有帖子:
&&& py.posts.all()
[&Post 'Hello Python!'&]
你仅需要知道的与普通 SQLAlchemy 的区别是:
允许你访问下面的东西:
sqlalchemy 和
模块中的所有函数
一个名为 session 的预配置范围会话
方法,根据模型分别创建和删除表
基类,其实是一个配置好的 delarative 基类
declarativ 基类
的表现得像一个正规的 Python 类,而
附加了一个 query 属性用于查询模型
你必须提交会话,但你不需要在请求的最后移除它, Flask-SQLAlchemy 已
经为你这么做了。

我要回帖

更多关于 flask操作mysql数据库 的文章

 

随机推荐