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)