我的CSDN | 我的51CTO

python如何用sqlalchemy操作数据库

工具:mysql  python sqlalchemy

----------------------------------------

准备工作:

1.安装mysql

如果是window环境请参考 win7安装mysql

如果是linux环境请参考 linux安装mysql

2.安装python

windows: win7安装python2和python3

linux: linux安装python36

注:CentOS自带python2.6.6,如果要安装2.7.9以后的版本同样要通过源码包安装

转载dudu博主的linux安装python2.7.9

3.基于python安装第三方库pymysql和sqlalchemy

pip install pymysql
pip install sqlalchemy

pip3 install pymysql
pip3 install sqlalchemy

--------------------------------------------------------------------------

可以开始撸码了~~~~~~

我是基于python36写的,话不多说直接上代码吧

  • 第一步:用mysql创建数据库

 

  • 第二步:创建数据库连接
# encoding:utf-8
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, INTEGER, String
from sqlalchemy.orm import sessionmaker
HOST_NAME = '127.0.0.1'     # 数据库所在服务器ip,因为我是本地数据库所以这里是127.0.0.1
HOST_PORT = '3306'          # 数据库端口
DATABASE_NAME = 'pydb'      # 数据库名
USER_NAME = 'root'          # 链接数据的用户名
PWD = '123456'              # 链接数据库的密码
# DB_URI是固定的格式,因为我的数据库是mysql,所以按照这个格式写就行了
DB_URI = 'mysql+pymysql://{0}:{1}@{2}:{3}/{4}?charset=utf8'.format(USER_NAME,PWD,HOST_NAME,HOST_PORT,DATABASE_NAME)
# 创建数据库连接
engine = create_engine(DB_URI)

 

  •  第三步: 创建表
# -------------创建数据库--------------------------------------------------------------------------------
# 操作数据库的基类
Base = declarative_base(engine)


class User(Base):
    """定义类其实就是创建一个表
    create table user (
    id int primary key auto_increment,
    user_name varchar(50) not null,
    password varchar(20) default '123456'
    );
    """
    __tablename__ = 'user'  # 表名
    id = Column(INTEGER,primary_key=True, autoincrement=True)   # id字段,主键,自增
    user_name = Column(String(50), nullable=False)  # 用户名字段
    password = Column(String(20), nullable=False, default='123456') # 密码字段

    def __repr__(self):
        """定义数据库查询返回的数据格式"""
        return 'User(id="%s",username="%s",password="%s")' % (self.id, self.user_name,self.password)


Base.metadata.create_all()

查看数据库,创建成功

 

  •  第四步: 插入数据
 1 # ------------插入数据---------------------------------------------------------------------
 2 # 创建会话
 3 Session = sessionmaker(engine)
 4 session = Session()
 5 panda = User(user_name='panda', password='123456')
 6 # 插入单条数据
 7 session.add(panda)
 8 user_list = []
 9 # 插入多条数据
10 user_list.append(User(user_name='test1', password='11111111'))
11 user_list.append(User(user_name='test2', password='22222222'))
12 user_list.append(User(user_name='test3', password='33333333'))
13 session.add_all(user_list)
14 session.commit()

查看数据库已经添加成功

  • 第五步:查询数据
# select top 1 from user;
res_first = session.query(User).first()
print(res_first)
# select *from user;
res_all = session.query(User).all()
print(res_all)
# select *from user where user_name='panda';
res_panda = session.query(User).filter_by(user_name='panda').all()
print(res_panda)
# select *from user where user_name='panda';
res = session.query(User).filter(User.user_name == 'panda').all()
print(res)

运行结果如下,这里返回的格式是以class类的__repr__方法定义的

 

  • 第六步: 更新数据
# update user set password = '654321' where user_name='panda';
res = session.query(User).filter(User.user_name == 'panda').all()[0]
res.password = '654321'
session.commit()

查看数据库已经更新成功

 

  • 第七步: 删除数据
# delete from user where id=3;
res = session.query(User).filter_by(user_name='test3').all()[0]
session.delete(res)
session.commit()

查看数据库已经删除成功

 

 

 

 
posted @ 2017-07-22 01:49  smileyes  阅读(1343)  评论(0编辑  收藏  举报