加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

数据库操作必读 SQLAlchemy进门

发布时间:2022-03-29 18:34:05 所属栏目:MySql教程 来源:互联网
导读:环境 :Ubuntu 15.10 64-bit SQLAlchemy是Python的ORM框架,它的理念是:数据库的量级和性能重要于对象集合,而对象集合的抽象又重要于表和行。 sqlite:///./foo.db SQLAlchemy缺省使用Python内建的sqlite3模块来连接或创建SQLite数据库。执行完create_eng
      环境 :Ubuntu 15.10 64-bit
 
     SQLAlchemy是Python的ORM框架,它的理念是:数据库的量级和性能重要于对象集合,而对象集合的抽象又重要于表和行。
 
     sqlite:///./foo.db
     SQLAlchemy缺省使用Python内建的sqlite3模块来连接或创建SQLite数据库。执行完create_engine后,可以发现当前目录多了foo.db文件,不妨用sqlite打开看看。
 
$ sqlite3 foo.dbSQLite version 3.8.11.1 2015-07-29 20:00:57Enter ".help" for usage hints.sqlite> .tables
注意这里用的是sqlite3而非sqlite,因为foo.db是经由Python内建的sqlite3模块创建的。
 
前面在创建MetaData时绑定了引擎:
 
metadata = MetaData(engine)
当然也可以不绑定。绑定的好处是,后续很多调用 (比如 MetaData.create_all(),Table.create(),等等)就不用指定引擎了。
 
创建表
创建两张表,user和address,address表里有一个user id的外键。 注意:表名没有像官方文档及很多人推荐的那样使用复数形式,个人偏好而已,详细讨论请见StackOverflow的这个问题: Table NamingDilemma: Singular vs. Plural Names
 
from sqlalchemy import create_engine, MetaData,        Table, Column, Integer, String, ForeignKeyengine = create_engine('mysql+mysqldb://root:******@localhost/sa_test', echo=True)metadata = MetaData(engine)
user_table = Table('user', metadata,        Column('id', Integer, primary_key=True),        Column('name', String(50)),        Column('fullname', String(100))        )address_table = Table('address', metadata,        Column('id', Integer, primary_key=True),        Column('user_id', None, ForeignKey('user.id')),        Column('email', String(128), nullable=False)        )metadata.create_all()
执行完metadata.create_all()这一句,两张表就创建好了,可以在MySQL里立即查看。
 
除了metadata.create_all(),Table自己也有create方法:
 
create(bind=None, checkfirst=False)
参数bind一般就是指引擎。 参数checkfirst表示是否检查表已经存在。为True时,若表已经存在,不报错,只是什么也不做;为False时,若表已经存在,则将引发异常。 

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读