python操作mysql

1、下载pymysql

pip3 install pymysql


2、导入模块

>>> import pymysql


3、创建连接

>>> conn = pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="123456",db="test")


4、创建游标

>>> cursor = conn.cursor()


5、执行sql语句,注意:返回的是受影响的行数

>>> effect_row = cursor.execute("create table student(ID int not null,Name varchar(10))")


6、向表中插入数据

>>> effect_row = cursor.executemany("insert into student(ID,Name)values(%s,%s)",[(1,"wilson"),(2,"david")])

>>> conn.commit()    //需要提交一下,因为默认开启事务

还可以:

>>> date = [(5,"cc"),(6,"dd"),(7,"ee")]

>>> effect_row = cursor.executemany("insert into student(ID,Name)values(%s,%s)",date)

>>> conn.commit() 


7、查询数据

>>> effect_row = cursor.execute("select * from student")

>>> print(cursor.fetchone())                      //fetchone()只读取一条

>>> print(cursor.fetchall())                      //fetchall()读取剩下的所有

>>> print(cursor.fetchmany(3))                     //detchmany(N)获取前N条数据


以上的代码都是在写一些原生sql语句,代码的重复性无法得到好的解决,接下来所要说的sqlalchemy就是解决这一问题的方案,不需要写原生sql语句,就和调用类方法那样操作数据库。

1、安装sqlalchemy

pip3 install sqlalchemy


2、使用sqlalchemy创建表结构

import sqlalchemy

from sqlalchemy import create_engine

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy import Column,Integer,String

from sqlalchemy.orm import sessionmaker

#创建表结构

engine = create_engine("mysql+pymysql://root:123456@localhost/test",encoding="utf-8",echo=True) //连接数据库,root为用户名,123456为密码,localhost为本机登录,test为库

Base = declarative_base()    //生成基类

class User(Base):

  __tablename__ = "user"    //表名

  id = Column(Integer,primary_key=True) //设置id字段并且为主键

  name = Column(String(32))   //设置name字段

  password = Column(String(64))  //设置password字段

Base.metadata.create_all(engine)   //创建表结构


3、使用sqlalchemy插入数据

Session_class = sessionmaker(bind=engine) #创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例

Session = Session_class() #生成session实例

user_obj = User(name="david",password="123456") #生成你要创建的数据对象

print(user_obj.name,user_obj.id)  #此时还没创建对象呢,打印一下id是None

Session.add(user_obj) #把要创建的数据对象添加到这个session里, 一会统一创建

print(user_obj.name,user_obj.id) #此时也依然还没创建

Session.commit() #现此才统一提交,创建数据

print(user_obj.name,user_obj.id,user_obj.password)


4、查询

data = Session.query(User).filter_by(name="david").all()  #first()取第一个

data2 = Session.query(User).filter(User.id>1).all()

print(data)

print(data[0].name)

print(data2)

data = Session.query(User).filter(User.id>1).filter(User.id<3).all()    #多条件查询时,需要加filter

print(data)


5、修改

data = Session.query(User).filter(User.id>1).filter(User.id<3).first()

data.name = "Wilson"

data.password = "www.mc.com"

Session.commit()


6、回滚

make_user = User(name="Licis",password="www")

Session.add(make_user)

print(Session.query(User).filter(User.name.in_(["Licis","David"])).all())

Session.rollback()

Session.commit()


7、分组统计

from sqlalchemy import func

print(Session.query(func.count(User.name),User.name).group_by(User.name).all())


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章