Python--Mysql使用调用总结

Python–Mysql使用调用总结

创建一个test库
create databse test;

授权一个用户
grant all privileges on *.* to 'root'@'%' identified by "XXXXX" with grant option

创建一个表
create table table_name(id  int  not nul),(.........);

查询
select * from table_name where 条件1 and 条件2

增加
insert into table_name (id,name,age,sex,grander) valuses(1,"hc",18,M,100),(.......),(....)

改
update table_name set id=10 where 条件判断

删
delete from table_name where 条件判断
drop table table_name

多表联合查询
select a.id,b.name from A a jion B b on a.id = b.tid

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

查看sql是否走索引
explain select* from student where name='hc';

连接数据库
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()      获取单个,返回值 tuple
cus.fetchall()      获取多个,返回值 list(单个元素是tuple)
cus.fetchmany(size=n) 获取多个
3.关闭游标和链接
cus.close()
conn.close()
注意结合try exception finally 的使用
SQLALchemy
1.创建引擎
engine = create_engine('mysql+pymysql://uesrname:password@hostname:port/dbname')
2.创建session
DbSession = sessionmaker(bind=engine)
session = DBsession()

3.创建表
a.获得 engine
b.实例化 metadate = MetaData(engine)
c.student = Table('表名',metadata,Colume('id',Integer,primary_ker=True),Colume('name',String(50)))
d.metadata.create_all()

4.增加
a.先要有一个模型
    Base = declarative_base()
    class Student(Base):
        __tablename__ = 'student'
        id = Column(Integer, primary_key=True)
        name = Column(String(100))
        age = Column(Integer)
        address = Column(String(100))
b.导入模型类,实例化该类
  student1 = Student(id=1001, name='ling', age=25, address="beijing")
  student2 = Student(id=1002, name='molin', age=18, address="jiangxi")
  student3 = Student(id=1003, name='karl', age=16, address="suzhou")
c.通过session.add(单实力)   session.add_all([实例1,实例2,实例3,])
  session.add(student1)
  session.add_all([student1, student2, student3])

5.查询
filter和filter_by的区别: 

filter: 可以使用 > 和 <  等,但是列必须是: 表.列  ; filter等于是==
    session.query(Student).filter(Student.id>100)
filter:不支持组合查询
    session.query(Student).filter(Student.id>100).filter(Student.age==18)

filter_by: 可以直接写列,不支持 >和 <   filter_by等于是=
    session.query(Student).filter_by(id=10)
filter_by:可以支持组合查询
    session.query(Student).filter_by(name='hc' and id=10)


like
模糊查询含有hc的关键字
select * from student where name like "%hc%";
模糊查询
session.query(Student).filter(Student.name like('%hc%'))

获取数据的时候有两个方法: 
one()   tuple
all()   list(单个元素是tuple)
如果在查询中不谢one(),或者all(),出来的就是sql语句

6.更新
a.先查出来
b.更新一下类所对应的属性值就ok了
c.session.commit()提交
    my_student = seesion.query(Student).filter(Student.id==100).one()
    student1.name = "test"
    seesion.commit()

7.删除
a.先查出来
b.直接调用delete()方法就可以了
c.session.commit()提交
    my_student = seesion.query(Student).filter(Student.id==100).delete()
    seesion.commit()
    my_student = seesion.query(Student).filter(Student.id==100).one() --查看删除了没

8.统计,分组,排序
统计:count()
只需要在查出来以后,把one或者all替换成count()
统计有多少个
    my_student = seesion.query(Student).count()

分组:group_by
查出来以后,把one或者all替换成group_by(属性)
    groupByAge = seesion.query(Student).group_by(Student.age).all()
    print(groupByAge)

排序:order_by
    orderByAge = seesion.query(Student).order_by(Student.age).all()
    orderByAge = seesion.query(Student).order_by(Student.age.desc()).all() --倒叙
    print(orderByAge)
阅读更多
个人分类: Python
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭