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)