当前位置:   article > 正文

当 Python 遇到数据库,这个模块就变得超级好用

当 Python 遇到数据库,这个模块就变得超级好用

大家好,今天我和大家来聊一下SQLALchemy这个模块,该模块是Python当中最有名的ORM框架,该框架是建立在数据库API之上,使用关系对象映射进行数据库的操作,简而言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

看到这里,相信不少的读者可能会感觉到云里雾里,我们就通过一个简单的案例在说明一下吧。喜欢记得收藏、关注、点赞

例如我们想要在mysql当中新建一个表格,我们首先需要连接上数据库,代码如下

# 连接数据库
sql_connect = 'mysql+pymysql://root:123456@localhost:3306/sql_prac?charset=utf8'
engine = create_engine(sql_connect)
DBSession = sessionmaker(bind=engine)
# 创建对象的基类:
BaseModel = declarative_base()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

定义表结构

对于新创建的表格,我们命名为是“User”,同时我们还需要定义表结构,代码如下

#定义对象
class User(BaseModel):
    # 表名
    __tablename__ = 'user'
    # 表结构,其中ID设为是主键,并且是自动增加的
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(20))
    age = Column(Integer)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

创建以及删除表

对于创建表以及删除表的操作,代码如下

#创建映射的数据库表
def init_db():
    BaseModel.metadata.create_all(engine)

#删除映射的数据库表
def drop_db():
    BaseModel.metadata.drop_all(engine)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

插入数据

我们可以尝试往新建的表格当中插入几个值,代码如下

def insert_data(name_1, age_1):
    # 创建session对象,相当于MySQLdb里面的游标
    session = DBSession()
    # 创建新User对象:
    new_user = User(name=name_1, age=age_1)
    # 添加到session:
    session.add(new_user)
    # 提交添加数据的操作
    session.commit()
    # 关闭session
    session.close()
    
if __name__ == "__main__":
    insert_data(name_1="Mike", age_1=20)
    insert_data(name_1="John", age_1=35)
    .......
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

运行后的结果如下图所示

图片

查询

要是我们想要查询表格中的数据,可以这么来做

# 创建Session:
session = DBSession()
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(User).filter(User.name == 'Tom').one()
# 打印类型和对象的name属性和age属性:
print(user.name, user.age)
# 关闭Session:
session.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

要是调用的是all()则返回所有行,因此我们需要通过for循环遍历出来的结果然后打印,代码如下

users = session.query(User).filter(User.name == 'John').all()
for u in users:
    print(u.name, u.age)
  • 1
  • 2
  • 3

更新和删除数据

我们尝试来更新表格中的一些数据,代码如下

# 创建Session:
session = DBSession()
# 可以进行多条数据更新
user = session.query(User).filter(User.id == 3)
user.update({User.age: 30})
# 提交数据
session.commit()
# 关闭Session
session.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

通过“ID”来锁定要更新的数据的位置,然后我们通过调用update()方法将其年龄改成指定的值。与此同时我们还可以来删除表格当中的一些值,代码如下

# 创建Session
session = DBSession()
# 删除哪些数据
user = session.query(User).filter(User.id == 5).one()
session.delete(user)
# 提交数据
session.commit()
# 关闭session
session.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

同样我们也是通过“ID”来锁定要删除数据的位置,然后调用delete()方法。

直接运行SQL语句

当然我们在创建session之后,我们也可以在里面直接运行SQL语句,例如我们想要查看一下总共有哪些数据库,代码如下

session = DBSession()
print(session.execute('show databases').fetchall())
session.close()
  • 1
  • 2
  • 3

或者我们是想返回表格中的所有数据,代码如下

session = DBSession()
print(session.execute('select * from user').fetchall())
session.close()
  • 1
  • 2
  • 3

DataFrameMySQL数据库

我们同时也可以批量的将excel或者csv文件当中的数据批量的导入到MySQL数据库当中,我们先通过Pandas读取文件中的数据,代码如下

sql_connect = 'mysql+pymysql://用户名:密码@ip地址:端口号/数据库名称?charset=utf8'
engine = create_engine(sql_connect)
df = pd.read_excel("sqlalchemy_test1.xlsx")
df.to_sql("user", engine, index=False, if_exists='append')
  • 1
  • 2
  • 3
  • 4

当然我们也可以从数据库的某个表格当中来读取数据,代码如下

df = pd.read_sql("表格名", engine)
print(df.head())
  • 1
  • 2

推荐文章

技术交流

欢迎转载、收藏、有所收获点赞支持一下!

在这里插入图片描述

目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
  • 方式②、添加微信号:dkl88191,备注:来自CSDN
  • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

长按关注

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/510815
推荐阅读
相关标签
  

闽ICP备14008679号