我爱编程

使用sqlalchemy增、删、改、查

2018-05-26  本文已影响1121人  海37度思念

sqlalchemy是python 中最有名的ORM(Object-Relational Mapping)框架之一,用于连接并操作数据库。

由于我需要引用了pandas来处理数据,若需要保存,希望能以常用的Dataframe格式来保存,而不想转换后再逐行保存。不过尝试过mysql.connector等不少框架,都无法实现,选来选去,只有sqlalchemy才相对比较好用。

前提:已建好库

使用的一般步骤:

1、创建连接:create_engine()

2、声明映射文件

    2.1 创建基类:declarative_base()

    2.2 定义表格对象类:class classname(baseclass):

    2.3 指定表名:__tablename__

若要建表:

    2.4 定义表结构:

class test1(Base):

    __tablename__ = 'test'

    id = Column(Integer,primary_key=True)

    name = Column(String(10))

    info = Column(String(10))

    2.5 建表:test1.metadata.create_all(engine)

若要插入数据:

    2.4 创建会话并提交:

        2.4.1 创建会话对象:DBSession= sessionmaker(bind=engine)

        2.4.2 实例化会话对象:session= DBSession()

        2.4.3 实例化表格对象:new_share= test1(id='01',name='hhhh',info='哈哈哈')

        2.4.4 将实例化的表格参数添加到会话等待提交:session.add(new_share)

        2.4.5 提交会话:session.commit()

        2.4.6 关闭会话:session.close()

若要查询数据:

    2.4 创建会话:

        2.4.1 创建会话对象:DBSession= sessionmaker(bind=engine)

        2.4.2 实例化会话对象:session= DBSession()

        2.4.3 构建查询语句:test= session.query(test1).filter(test1.id=='01').one()

    2.5 查询结果是一个表格对象,需要看对应列的值:print(test.name)

注:除了以上的方法,还有其他的方法可以直接进行创建表格、插入数据、查询数据等操作。先将其摘录如下

具体方法可参考:https://www.jianshu.com/p/2f07258ffc98

作者:谢小路 链接:https://www.jianshu.com/p/2f07258ffc98 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

创建数据表的其他方式

from sqlalchemy import Table, MetaData, create_engine

engine = create_engine("mysql+mysqlconnector://root:123456@localhost:3306/test") metadata = MetaData()

t1 = Table('users', metadata, Column('id',INT, primary_key=True), Column('name', String(20)), Column('fullname', String(50)), Column('password', String(20)) )

t2 = Table('address', metadata, Column('id',INT, primary_key = True), Column('email_address',String(50), nullable=False), Column('user_id', INT, ForeignKey('users.id')) ) metadata.create_all(engine)

# 创建两个数据表分别为users 和 address

插入数据的其他方式

# 在建立的会话基础上执行sql语句

session.execute('insert into users values(2,"Bob","budian")')

session.commit()

# 使用映射类成员变量的数据

user = User(id="3", name="alice", password="hgf")

session.add(user) session.commit()  

查询操作

users = session.query(User).all()# 返回数据表所有数据

修改数据

# 在会话的基础上执行sql语句

session.execute('update addresses set user_id = 1 where id = 2')

session.commit()

# 使用映射类成员变量的数据

session.query(Address).filter(Address.id ==2).update({"user_id":1})

下面是在使用的时候踩到的坑,这个问题解决之后,就一路坦途了。

报错如下:

sqlalchemy.exc.NotSupportedError: (mysql.connector.errors.NotSupportedError) Authentication plugin 'caching_sha2_password' is not supported

create_engine的时候没有报错,在你创建表test1.metadata.create_all(engine) 的时候,报错了,是因为mysql.connector的引擎不支持caching_sha2_password的加密格式

有几种解决方法:

1、在client端,将加密格式选择成mysql_native_password

2、将服务单的加密格式改成mysql_native_password

3、将用户登录的规则改为mysql_native_password,不过写在程序中不方便

4、按照官方文档中的描述,加上use_pure=False,不过试了下,不管用

最后决定选择1,重新输入密码,选择下图红框中的选项,然后重启mysql,搞定:

上一篇下一篇

猜你喜欢

热点阅读