2018-5-13

Python与SQLAlchemy实战
本文详细介绍了如何使用Python和SQLAlchemy进行数据库操作,包括数据库连接、表创建、数据增删改查、更新、删除及统计等功能,并提供了具体的代码示例。

demon1.py:

#!/ usr / bin / env python

# -  *  - 编码:utf-8  -  *  -

#@时间:2018/5/13 20:04

# @作者:lingxiangxiang

# @File:demon1.py

“””

创建一个测试库

创建数据库测试;

授权一个用户

将*。*的所有权限授予'1qaz @ WSX'标识的'xiang'@'%';

创建表

创建表student(id int not null);

查询

select * from tabel_name where条件1和条件2

增加

(1,'ling',25,'M',99),(2,'ajing',45,'F',88)插入到table_name(id,name,age,sex,grander)

update table_name set id = 10 where条件判断

删除

从table_name中删除where条件判断

drop table table_name

联合查询

从a.id = b.tid中的a a b B上选择a.id,b.name

创建索引

创建索引idx_库名_表名_列名1_列名2(列名1,列名2)

查看SQL是否走索引

解释select * from student where name ='ling'

链接数据库

Python2使用的是MySQLdb

python3使用的pymysql pip安装

1.创建链接和游标

注意:在mysql的连接中,尽量使用一个连接,确保MySQL的的并发数

conn = pymysql.connect(host ='',port =,user ='',passwd ='',db ='')

cus = conn.curse()

2.实行sql

sql =“select * from Student;”

cus.execute(SQL)

cus.fetchone()获取单个返回值元组

cus.fetchall()获取多个返回值列表(单个元素是元组)

cus.fetchmany(size = n)获取多个

3.关闭游标和连接

cus.close()

conn.close()

注意结合最后的使用

SQLAlchemy的

创建引擎

engine = create_engine('mysql + pymysql:// username:password @ hostname:port / db')

2.创建会话

DBsession = sessionmaker(bind =引擎)

session = DBsession()

3.创建表

一个。获得发动机

湾 元数据=元数据(引擎)

C。student = Table('表名',元数据,Colume('id',Integer,primary_key = True),Colume('name',String(50))

d。metadata.create_all()

4.增加

一个。先要有一个模型

Base = declarative_base(0

班级学生(基础):

    __tablename__ ='学生'

    id = Column(Integer,primary_key = True)

    name = Column(String(100),primary_key = True)

湾 导入模型类,实例化该类,

sutdent1 =学生(1,'ling')

C。session.add(单实例)session.add_all([实例1,实例2])

5.查询

过滤和filter_by的区别

filter:可以使用> <等,但是列必须是:表。列,filter的等于号是==

session.query(学生).filter(Student.id> 100)

过滤器不支持组合查询

session.query(学生).filter(Studnet.id> 100).filter(名称== '灵')

filter_by:可以直接写列,不支持<> filter_by等于是==

session.query(学生).filter_by(ID == 10)

filter_by可以支持组合查询

session.query(Student).filter_by(name =='ling'and id =='342')

从学生中选择*如%ling%';

模糊查询含有玲的关键字

模糊查询

session.query(Student).filter(Student.name like('%ling%'))

获取数据的时候有两个方法:

一个()元组

all()list(单个元素是元组)

如果在查询中不写一(),或者所有()出来的就是sql语句

6.更新

先查出来

2.跟新一下类所对应的属性值就ok

3. session.commit()

student1 = session.query(Student).filter(Student.id == 1001)

student1.name =“test”

session.commit()

7.删除

先查出来

2.直接调用delete()方法就可以

3.提交一下

8.统计,分组,排序

统计:COUNT()

只需要在查出来以后,把一个或者全部替换成count()

统计有多少个

分组:GROUP_BY

查出来以后,把一个或者全部替换成GROUP_BY(属性)

 

demon2.py:

#!/ usr / bin / env python
# -  *  - 编码:utf-8  -  *  -
#@时间:2018/5/13 20:55
# @作者:lingxiangxiang
# @File:demon2.py

from sqlalchemy import create_engine,Integer,String,Column
来自 sqlalchemy.ext.declarative import declarative_base
从 sqlalchemy.orm 进口 sessionmaker


Base = declarative_base()
班级 学生(基础):
    __tablename__ =  '学生'
    id  = Column(Integer,primary_key = True)
    name = Column(String(100))
    年龄=列(整数)
    address = Column(String(100))


def  update(session):
    student1 = session.query(Student).filter(Student.id ==  1001).one()
    student1.name = ' test123 '
    session.commit()
    student2 = session.query(Student).filter(Student.id ==  1001).one()
    打印(student2.name)
DEF  删除(会话):
    session.query(Student).filter(Student.id ==  1001).delete()
    session.commit()

def  插入(会话):
    student1 =学生(id = 1004,姓名= ' ling ',年龄= 28,地址= ' shanxi ')
    session.add(student1)
    session.commit()

def  count(session):
    numnber = session.query(Student).filter()。count()
    打印(“总学生是{0} ”. format(numnber))

def  groupBy(session):
    groupByAge = session.query(Student).group_by(Student.age).all()
    打印(groupByAge)
    对于我在 groupByAge中:
        打印(i.id,i.name,i.age,i.address)

def  orderBy(session):
    orderByAge = session.query(Student).order_by(Student.age.desc())。all()
    for x in orderByAge:
        打印(x.id,x.name,x.age,x.address)

def  main():
    engine = create_engine(' mysql + pymysql:// xiang:xiang@192.168.48.136/sqlalchemy ')
    DBsession = sessionmaker(bind =引擎)
    session = DBsession()
    #插入(会话)
    #更新(会话)
    #删除(会话)
    #计数(会话)
    # GROUPBY(会话)
    排序依据(会话)

 

转载于:https://my.oschina.net/u/3803404/blog/1812413

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值