资源描述:
《sqlalchemy最新权威详细教程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、SQLAlchemy最新权威详细教程前言:最近开始学习SQLAlchemy,本教程是其官方文档以及在读英文版的翻译加一些自己的理解和总结1什么是SQLAlchemy?它是给mysql,oracle,sqlite等关系型数据库的python接口,不需要大幅修改原有的python代码,它已经包含了SQL表达式语言和ORM,看一些例子:sql=”INSERTINTOuser(user_name,password)VALUES(%s,%s)”cursor=conn.cursor()cursor.execute(sql,(‘d
2、ongwm’,‘testpass’))以上是一个常用的mysql的SQL语句,但是冗长也容易出错,并且可能导致安全问题(因为是字符串的语句,会存在SQL注入),并且代码不跨平台,在不同数据库软件的语句不同(以下是一个 Oracle例子),不具备客移植性:sql=”INSERTINTOuser(user_name,password)VALUES(:1,:2)”cursor=conn.cursor()cursor.execute(sql,‘dongwm’,‘testpass’)而在SQLAlchemy里只需要这样写:statement=user_table.in
3、sert(user_name=’rick’,password=’parrot’)statement.execute() #护略是什么数据库环境SQLAlchemy还能让你写出很pythonic的语句:statement=user_table.select(and_(user_table.c.created>=date(2007,1,1),user_table.c.created4、它你设置的数据库类型是基于内存的sqliteuser_table=Table( #创建一个表‘tf_user’,metadata,Column(‘id’,Integer,primary_key=True), #一些字段,假设你懂SQL,那么以下的字段很好理解Column(‘user_name’,Unicode(16),unique=True,nullable=False),Column(‘email_address’,Unicode(255),unique=True,nullable=False),Column(‘password’,Unicode(40),
5、nullable=False),Column(‘first_name’,Unicode(255),default=”),Column(‘last_name’,Unicode(255),default=”),Column(‘created’,DateTime,default=datetime.now))users_table=Table(‘users’,metadata,autoload=True)#假设table已经存在.就不需要指定字段,只是加个autoload=TrueclassUser(object):pass #虽然SQLAlchemy强大,但是插入
6、更新还是需要手动指定,可以使用ORM,方法就是:设定一个类,定义一个表,把表映射到类里面mapper(User,user_table)下面是一个完整ORM的例子:Sourcecode fromsqlalchemy.ormimportmapper,sessionmaker#sessionmaker()函数是最常使用的创建最顶层可用于整个应用Session的方法,Session管理着所有与数据库之间的会话fromdatetimeimportdatetimefromsqlalchemyimportTable,MetaData,Column,ForeignKey
7、,Integer,String,Unicode,DateTime#会SQL的人能理解这些函数吧?engine=create_engine("sqlite:///tutorial.db",echo=True)#创建到数据库的连接,echo=True表示用logging输出调试结果metadata=MetaData()#跟踪表属性user_table=Table(#创建一个表所需的信息:字段,表名等'tf_user',metadata,Column('id',Integer,primary_key=True),Column('user_name',Unicode
8、(16),unique=True,nullable=