全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析师(CDA)专版
380 0
2022-04-21

作者:俊欣

来源:关于数据分析与可视化

今天小编和大家来聊一下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()定义表结构

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

#定义对象 class User(BaseModel): # 表名 __tablename__ = 'user' # 表结构,其中ID设为是主键,并且是自动增加的 id = Column(Integer, primary_key=True, autoincrement=True)    name = Column(String(20))    age = Column(Integer)创建以及删除表

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

#创建映射的数据库表 def init_db(): BaseModel.metadata.create_all(engine) #删除映射的数据库表 def drop_db(): BaseModel.metadata.drop_all(engine)插入数据

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

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)    .......

运行后的结果如下图所示


查询

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

# 创建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()

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

users = session.query(User).filter(User.name == 'John').all() for u in users: print(u.name, u.age)更新和删除数据

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

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

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

# 创建Session session = DBSession() # 删除哪些数据 user = session.query(User).filter(User.id == 5).one()session.delete(user) # 提交数据 session.commit() # 关闭session session.close()

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

直接运行SQL语句

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

session = DBSession() print(session.execute('show databases').fetchall())session.close()

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

session = DBSession() print(session.execute('select * from user').fetchall())session.close()DataFrame到MySQL数据库

我们同时也可以批量的将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')

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

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


编辑推荐
1、2022年300个以上最佳免费数据科学课程
2、大厂数据分析面试指南!来自亚马逊、谷歌、微软、头条、美团的面试问题!
3、机器学习模型方法总结
4、历史最全机器学习/深度学习/人工智能专业术语表中英对照表
5、机器学习如何应用于商业场景?三个真实的商业项目
6、数据工作者的自我修养 | 哪些技能是必不可少的?
7、《汗牛充栋:数据分析书籍分享》CDA网校新课上线
8、文本挖掘常用的107个语料库
9、一图读懂“东数西算”工程
10、零基础转行数据分析,看这篇文章就够了

DA内容精选
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群