黑马程序员技术交流社区

标题: 【广州python】使用Python数据库ORM SQLAlchemy [打印本页]

作者: 小生不才啦    时间: 2018-9-6 10:51
标题: 【广州python】使用Python数据库ORM SQLAlchemy
本帖最后由 小生不才啦 于 2018-10-22 21:05 编辑

1>python的数据库ORMObject Relational Mapper有什么作用
ORM是对象关系映射,ORM主要是按照统一的标准把数据库中的关系数据映射成程序中的对象。对数据库中的表的sql操作,可以通过超python程序对类的操作完成。

2>创建连接:

SQLAlchemy 的连接创建是 Lazy 的方式, 即在需要使用时才会去真正创建. 未真正使用之前做的工作, 全是"定义".

连接的定义是在 engine 中做的.

engine 的定义包含了三部分的内容, 一是具体数据库类型的实现, 二是连接池, 三是策略(即 engine 自己的实现).

所谓的数据库类型即是 MYSQL , Postgresql , SQLite 这些不同的数据库.

一般创建 engine 是使用 create_engine 方法:

create_engine('dialect+driver://username:password@host:port/abc')

如 当使用mysql数据库时,_ENGINE = sqlalchemy.create_engine(FLAGS.sql_connection, **engine_args)FLAGS.sql_connection为  mysql://root:MYSQL_PASS@192.168.87.100/abc?charset=utf8

注意:这里 指明了mysql的用户root,密码MYSQL_PASS,主机192.168.87.100,数据库abc。
这里,root用户应该有权限操作abc。否则后继建表不成功,且报错
首先,需要建数据库abc,然后授权。
$ mysql -uroot -pMYSQL_PASS
mysql> CREATE DATABASE abc;
mysql> GRANT ALL PRIVILEGES ON abc.* TO 'root'@'localhost' \
IDENTIFIED BY 'GLANCE_DBPASS';
mysql> GRANT ALL PRIVILEGES ON abc.* TO 'root'@'%' \
IDENTIFIED BY 'GLANCE_DBPASS';
mysql> FLUSH PRIVILEGES;
engine_args = {
    "pool_recycle": FLAGS.sql_idle_timeout,
    "echo": False,
    'convert_unicode': True,
}

第一个参数:建立数据库连接用的。
第二个参数:可以有多个。

ECHO=True,这么设置的话,SQLAlchemy将会通过Python模块logging来输出日志,

如果你是在交互式命令控制台,一些信息会被输出出来,我们可能会看到SQLAlchemy生成的一些SQL语句,
这个对于我们学习和调试很重要的,所以在这里我们将其设置为True,否则,
如果不愿意SQLAlchemy输出那么多信息可以设置为False。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2