sqlalchemy基本操作

操作说明

连接数据库

初始化链接信息

create_engine(connection_info)

connection_info: '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'

各数据库连接样例

# default
engine = create_engine('mysql://scott:tiger@localhost/foo')
# mysql-python
engine = create_engine('mysql+mysqldb://scott:tiger@localhost/foo')
# MySQL-connector-python
engine = create_engine('mysql+mysqlconnector://scott:tiger@localhost/foo')
# OurSQL
engine = create_engine('mysql+oursql://scott:tiger@localhost/foo')

创建连接

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from contextlib import contextmanager


class MysqlOp(object):
    
    def __init__(self):
        engine_params = {
        'name_or_url':'mysql://scott:tiger@localhost/foo',
        'max_overflow': 256,
        'encoding': 'utf-8',
        'pool_recycle': 3600,
        'pool_size': 2,
        'echo': False,
        }
        self.engine = create_engine(**engine_params)
        self.session = sessionmaker(bind=engine)
        # 此session类似于一个connection ,可直接用于查询
        #session.execute(sql_str)
    
    @contextmanager
    def get_session():
        session = self.session
        session.connection()
        try:
            yield session
            session.commit()
        else:
            session.rollback()

    def init_db(self, base):
        base.metadata.create_all(self.engine)  # 创建所有表

    def drop_db(self, base):
        base.metadata.drop_all(self.engine)
    

定义models

from sqlalchemy import Column
from sqlalchemy.types import CHAR, Integer, String
from sqlalchemy.ext.declarative import declarative_base


base_model = declarative_base()

class User(base_model):
    __tablename__ = 'user'

    id = Column(Integer, primary_key=True)
    name = Column(CHAR(30))  # or Column(String(30))

import MysqlOp
mysql_op = MysqlOp()
mysql_op.init_db(base_model)

获取session

mysql_op = MysqlOp()
with mysql_op.get_session as session:
    session.query()

CRUD

user = User(name='jack')
session.add(user)
session.query(User).all()
# 分页
session.query(User).filter(User.id == id).all().offset(index).limit(page)
# in
session.query(User).filter(User.id.in_(id_tuple)).all()
# order by
session.query(User).order_by(desc(User.id)).all()
# like and count
session.query(User).filter(Usre.name.like("%ed")).count()
# between
session.query(User).filter(Usre.create_time.between(start_time, end_time)).all()  # 包含 start_time,end_time
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,020评论 3 119
  • 古德猫宁! 我们大早起来, 吃了这儿的美味营养早餐!只是,这儿的面也太咸了吧!而且还是辣的。 我们...
    先祖stone阅读 121评论 0 0
  • 早上看到林夫妇吃早饭 很省 生下来全给国外读书的女儿,就像农村省下来都给儿子买房 自己的犹豫,给自己留后路,担心以...
    库因塔阅读 144评论 0 0
  • 相信大家对阿里巴巴很熟悉了,但有了解过员工们上班的环境和工作时间还有工资收入是多少吗?我想很多人都会关心。因...
    浪花两朵阅读 284评论 0 0
  • 生活节奏不断加快,越来越多的人进入了争分夺秒的生活。上班用跑,早餐在路上,回程的车上睡觉。不断调试之后仍然觉得...
    榨菜小姐jmu阅读 304评论 2 2