本帖最后由 小生不才啦 于 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。
|
|