1. 安装和配置
mysql安装与配置参考网址,如果在安装过程中的存在下面提醒,可以参考问题解决
2. 安装对应的python模块
安装pymysql和sqlalchemy模块,打开命令行窗口输入如下代码,一般就可以自动安装完毕
pip install –i https://pypi.tuna.tsinghua.edu.cn/simple pysql sqlalchemy
→ 输出的结果为:
3. 数据库连接
首先需要先创建一个数据库,如下,打开cmd,使用mysql -u root -p进行登录,需要输入自己的账户密码,这一步在mysql的安装与配置中已经详细过了,然后就是创建一个新的数据库并命名
;
→ 输出的结果为:(注意上面的语句最后是由英文分号的)
在python中创建引擎,代码如下
from sqlalchemy import create_engine
engine = create_engine(
‘mysql+pymysql://root:root@127.0.0.1:3306/test’,
max_overflow = 5, #超过连接池大小外最多可以创建的连接
pool_size = 10, #连接池的大小
echo = True #调试信息展示
)
print(‘连接成功’)
→ 输出的结果为:(其中第一个root为用户名,一般是默认的即可,第二个root就是用户设置的密码,这里是使用root占位,在输入时需要输入自己的密码)
连接成功
4. 数据库中的数据类型与python中的数据类型
基础知识,两者数据类型的练习如下表
SQLAchemy |
Python |
Text |
Long str |
Boolean |
bool |
Biginteger |
int |
Date |
Datetime.date |
DateTime |
Datetime. datetime |
Float |
float |
String |
string |
代码实现数据库的连接并实现表格的写入,如下,
from sqlalchemy import Column,String,Integer,Boolean,DateTime
from sqlalchemy import create_engine,MetaData,Table
from datetime import datetime
engine = create_engine(
‘mysql+pymysql://root:lx520828@127.0.0.1:3306/test’,
max_overflow = 5, #超过连接池大小外最多可以创建的连接
pool_size = 10, #连接池的大小
echo = True, #调试信息展示
)
metadata = MetaData()
user = Table(‘user’,metadata,
Column(‘id’,Integer,primary_key=True,autoincrement=True),
Column(‘name’,String(255)),
Column(‘data’,DateTime(),default=datetime.now, onupdate=datetime.now),
Column(‘man’,Boolean(),default=False)
)
metadata.create_all(engine)
print(‘连接成功’)
在cmd中查看创建的表格信息,如下(已经创建了一个test表格了,这里创建的user是第二个表格)
5. 原生语句进行数据的增添删改
① 插入数据 insert into table(key1,key2) values(value1,value2),如下,下面的user就是创建的table的名称
engine.execute(“insert into user(name) values(‘lx’);”)
→ 输出的结果为:(第一次查询的时候是显示空,在程序运行之后再刷新,就显示出插入的信息了,这里只插入了一个键对应的信息,如果要插入多个键对应的信息,在括号里面需要使用逗号分隔,并输入键名,同样对value里面的值也是如此)
② 更新数据 update table set key1 = value1,key2 = value2,where…,如下
engine.execute(“update user set id = 5,name = ‘python’ where id=1;”)
→ 输出的结果为:(user表格中的数据已经更新了)
③ 查询数据 select * from table
data = engine.execute(“select * from user;”)
for i in data:
print(i)
→ 输出的结果为:(由于只插入了一条数据,所以遍历循环只有一条信息输出)
(5, ‘python’, None, None)
④ 删除数据 delete from table where…
engine.execute(“delete from user where id = 5;”)
→ 输出的结果为:(因为刚刚更新表格的时候把id变成了5,所以这里删除的话就是id=5)
6. 用表结构增添删改
① 插入数据 table.insert(),注意这个语句后面是逗号不是点
from sqlalchemy import Column,String,Integer,Boolean,DateTime
from sqlalchemy import create_engine,MetaData,Table
from datetime import datetime
engine = create_engine(
‘mysql+pymysql://root:lx520828@127.0.0.1:3306/test’,
max_overflow = 5, #超过连接池大小外最多可以创建的连接
pool_size = 10, #连接池的大小
echo = True, #调试信息展示
)
metadata = MetaData()
user = Table(‘user’,metadata,
Column(‘id’,Integer,primary_key=True,autoincrement=True),
Column(‘name’,String(255)),
Column(‘data’,DateTime(),default=datetime.now, onupdate=datetime.now),
Column(‘man’,Boolean(),default=False)
)
conn = engine.connect()
conn.execute(user.insert(),{‘name’:‘mysql’})
conn.close()
→ 输出的结果为:(每一次增加,都是基于上一个数据的基础上,所以这里的id是为6,即使在这个表里的数据进行了删除)
② 更新数据 table.update().where() .values()注意中间连接的方式是点不是逗号
conn = engine.connect()
# conn.execute(user.insert(),{‘name’:’mysql’})
conn.execute(user.update().where(user.c.id==6).values(name=‘c++’))
conn.close()
→ 输出的结果为:(前面的都不变,只需要将插入的语句变成更新数据的语句即可)
③ 查询数据 select([table.c.key1,table.c.key2…])
from sqlalchemy import select
#需要先导入select模块
conn = engine.connect()
# conn.execute(user.insert(),{‘name’:’mysql’})
# conn.execute(user.update().where(user.c.id==6).values(name=’c++’))
data = conn.execute(select([user.c.name,]))
print(data.fetchall())
conn.close()
→ 输出的结果为:(因为取得是name和data字段,所以最后输出的就是这两个字段对应的数据)
[(‘c++’, datetime.datetime(2020, 4, 20, 23, 6, 34))]
④ 删除数据 table.delete().where(table.c.key1,…)
conn = engine.connect()
# conn.execute(user.insert(),{‘name’:’mysql’})
# conn.execute(user.update().where(user.c.id==6).values(name=’c++’))
# data = conn.execute(select([user.c.name,user.c.data]))
# print(data.fetchall())
conn.execute(user.delete().where(user.c.id==6))
conn.close()
→ 输出的结果为:(数据再一次被删除)
7. 集成ORM操纵数据库
★★★★★必须要掌握的方式
Declarative_base : 用于创建数据库表类的基类
Sessionmaker : 用于代替conn,执行数据库操作语句
from sqlalchemy import create_engine,Column,String,Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine(
‘mysql+pymysql://root:lx520828@127.0.0.1:3306/test’,
max_overflow = 5, #超过连接池大小外最多可以创建的连接
pool_size = 10, #连接池的大小
echo = True, #调试信息展示
)
Base = declarative_base()
class Host(Base):
__tablename__ = ‘hosts’
id = Column(Integer,primary_key=True,autoincrement=True)
hostname = Column(String(64),unique=True,nullable=False)
ip_addr = Column(String(128),unique=True,nullable=False)
port = Column(Integer,default=8080)
Base.metadata.create_all(engine)
→ 输出的结果为:(已经创建了hosts表格,并且插入了相应的数据)
① 添加数据sess.add()/sess.add_all()
(注释掉最后创建列表的语句,然后添加一个接口,进行数据的添加)
# Base.metadata.create_all(engine)
if __name__ == ‘__main__’:
Session = sessionmaker(bind=engine)
sess = Session()
h = Host(hostname=‘test1’,ip_addr=‘127.0.0.1’)
h2 = Host(hostname=‘test2’,ip_addr=‘192.168.1.1’,port=8001)
h3 = Host(hostname=‘test3’, ip_addr=‘192.168.1.2’, port=8002)
sess.add(h)
sess.add_all([h2,h3])
sess.commit()
→ 输出的结果为:(添加一条数据是add,如果是多条的话,就是add_all,然后以列表的方式添加,最后别忘记提交数据到数据库)
② 删除数据 sess.query(table).filter(条件).delete()
# sess.add(h)
# sess.add_all([h2,h3])
sess.query(Host).filter(Host.id>1).delete()
sess.commit()
→ 输出的结果为:(将上面的添加数据修改为删除数据的语句,filter()括号里面填写的筛选条件)
③ 更新数据 sess.query(table).filter(条件).update({内容})
# sess.add(h)
# sess.add_all([h2,h3])
# sess.query(Host).filter(Host.id>1).delete()
sess.query(Host).filter(Host.id==1).update({‘port’:9999})
sess.commit()
→ 输出的结果为:(数据已经完成更新)
④ 查询数据 sess.query(table).filter_by(id=1).all()
data = sess.query(Host).filter_by(id=1).all()
for i in data:
print(i.hostname,i.port)
sess.commit()
→ 输出的结果为:
test1 9999
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试