python3利用sqlalchemy操作mysql数据库

一、安装sqlalchemy

 

pip install sqlalchemy

通过python命令行工具导入模块未报错则说明安装成功

from sqlalchemy import *
from sqlalchemy.orm import *

二、使用sqlalchemy对数据库进行操作

 1.定元信息,绑定到引擎

#  python3.x连接mysql使用的是如下路径连接,若是Python2.x,则可通过
#  engine = create_engine("mysql://username:password@localhost/database") 建立连接
engine = create_engine("mysql+pymysql://root:mysql@localhost/test")
metadata = MetaData(engine)

注意:若使用的是python3.x在此处会报No Module name pymysql,直接使用pip install pymysql安装即可

2.创建users数据表

# 创建表内容为:table_name为users,columns有id、name、email
user_table = Table('users',metadata,
                   Column('id',Integer,primary_key=True),
                   Column('name',String(40)),
                   Column('email',String(120)))

user_table.create()

3.实例化一个插入句柄,并插入一条数据

# 插入一条数据
i_obj= user_table.insert()
i_obj.execute({'name':'laowang','email':'laowang@qq.com'})
# 插入两条数据
i_obj.execute({'name':'lisi'},{'name':'zhangsan'})

4.使用ORM操作

   使用ORM操作就是将Python的类与数据库的表映射,而不用直接写sql语句,创建映射关系:

# 定义一个User类
class User(object):
    def __repr__(self):
        return '%s(%r ,%r)' % (self.__class__.__name__,self.name,self.email)


# 使用mappr函数建立映射关系
mapper(User,user_table)

user = User()
user.name
print(user)

5.建立会话,这里以插入和查询为例

# 创建一个session,并与User类关联
session = create_session()
query = session.query(User)

# 查询name为langwang的用户
query.filter_by(name='laowang').first()

# 添加用户名为wanmgazi的用户
u1 = User()
u1.name = 'wangmazi'
session.add()
session.flush()
session.commit()

建立会话时使用sessionmaker效果会更好一点,还有其他诸如删除、事务等高级操作建议参考官方文档

6.以上代码的完整示例如下

from sqlalchemy import *
from sqlalchemy.orm import sessionmaker, mapper


# 定义一个User类
class User(object):
    def __repr__(self):
        return '%s(%r ,%r)' % (self.__class__.__name__,self.name,self.email)

def init_db():
    engine = create_engine("mysql+pymysql://root:mysql@localhost/test")
    metadata = MetaData()
    # 创建表内容为:table_name为users,columns有id、name、email
    user_table = Table('users',metadata,
                    Column('id',Integer,primary_key=True),
                    Column('name',String(40)),
                    Column('email',String(120)))

    metadata.create_all(engine)
    mapper(User,user_table)
    session = sessionmaker()
    return session

class Database(object):

    def __init__(self,session):
        self.session = session
        self.query = self.session.query(User)

    def  get_user(self,name):
        return self.query.get(name)

    def  get_email(self,user_id):
        user = self.get_user(id=user_id)
        return user.email

    def  insert_info(self,name,email):
        user = User(name,email)
        self.session.add(user)
        self.session.commit()

    def delete_info(self,name):
        user = self.get_user(name)
        self.session.delete(user)
        self.session.commit()

    def get_count(self):
        return self.query.count()

    def get_all_user(self):

        return self.query.all()

    def modify_info(self,name,email):
        self.query.filter(User.name==name).update({'email':email})
        self.session.commit()

最后的完整代码没有整体运行过,若发现错误请及时指出,谢谢!!!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值