sqlalchemy的初步认识

sqlalchemy是python的一个包,用来操作数据库.其实sqlalchemy自己并不能连接数据库,它也是通过pymysql或者其他数据库连接工具连接的.
alchemy,炼丹术,炼金术,魔法
通过sqlalchemy可以使不同的代码通过不同的工具连接不同的数据库.就像是炼丹炉一样,一切操作都在这里熔炼.
下面我们看下简单应用

#首先我们通过这么一个方法来连接数据库
engine = create_engine('mysql+pymysql://root:root@localhost:3306/test?charset=utf8')

create_engine()的参数是一个url,一个特殊的url
其中mysql+pymysql ,这是协议,说明我们使用的数据库类型+连接这个数据库用到的工具. 所以我们还要安装pymysql包,否则会报错误提示.
://root 这个root是数据库的用户名
:root@ 这个root是数据库的密码
localhost:3306 主机和端口
/test 这个是数据库的名称
?charset=utf8 这个是指明数据库的字符集编码. 如果不写 那么数据库将不能插入中文,很是尴尬

即使是这样,炼丹术这个工具也经常在增删改查的时候报一个警告

C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\cursors.py:165: Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 496")
  result = self._query(query)

网上修改ini文件的做法,没有调试成功.有成功经验的可以留言说一下.

炼丹术和很多orm一样,将数据库的表和对象一一对应


#定义一个基类
Base = declarative_base()

class Employee(Base):
    __tablename__ = 'employee'

    id = Column(Integer, primary_key=True)
    name = Column(String(32))
    # name = Column(String)
    # name = Column(VARCHAR(32))
    # name = Column(VARCHAR)
    age = Column(Integer)
    salary = Column(Integer)

#对数据库进行初始化
def init_db():
    Base.metadata.create_all(engine)

init_db()

这就完成了数据库的初始化, 成功创建了一张employee表. 首先 要 表化的类继承基类Base , Base = declarative_base().
然后通过Base.metadata.create_all(engine)就成功的将所有继承了Base的类都表化了.

接下来是增删改查.
这里有个session的概念, 增删改 都需要commit ,否则不会修改表数据.

通过这种方式engine.execute(sql)无需提交,相当于直接用sql语句操作数据库


# engine.execute("insert into books values(101, '冬天的故事','23.5','lcc')")

#创建一个Session类
Session = sessionmaker(bind=engine)
#创建一个session对象
session = Session()

#创建一个employee
# e1 = Employee(name='卡', age=22, salary=9999)
# e1 = Employee(name='xxxx', age=22, salary=9999)
# session.add(e1)
# session.commit()

# e2 = Employee(name='lisi', age=30, salary=8000)
# e3 = Employee(name='wangwu', age=40, salary=7000)
#
# session.add_all([e2, e3])
# session.commit()


session.query(Employee).filter(Employee.id == 5).delete()
# em = session.query(Employee).filter(Employee.id == 1)
# print(em)

# res = session.query(func.sum(Employee.age)).group_by(Employee.name).all()
# print(res)

session.commit()
# session.close()

最后将导入的包双手奉上

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
from sqlalchemy import func
from sqlalchemy import VARCHAR
from sqlalchemy.orm import sessionmaker

猜你喜欢

转载自blog.csdn.net/xiaoxiaodechongzi/article/details/79473740