高效数据库操作:Python与Sqlalchemy最佳实践

更新:11-17 民间故事 我要投稿 纠错 投诉

其实高效数据库操作:Python与Sqlalchemy最佳实践的问题并不复杂,但是又很多的朋友都不太了解,因此呢,今天小编就来为大家分享高效数据库操作:Python与Sqlalchemy最佳实践的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2.安装python-mysqldb

apt-get 安装python-mysqldb

3. 简易安装

wgethttp://peak.telecommunity.com/dist/ez_setup.py

pythonez_setup.py

4.MySQL-python

easy_install MySQL-Python

5.SQL炼金术

easy_install SQLAlchemy

vimtest.py

从sqlalchemy 导入create_engine

从sqlalchemy.orm 导入sessionmaker

DB_CONNECT_STRING 连接数据库的路径,mysql+mysqldb 指定使用MySQL-Python来连接,“ooxx”是使用的数据库名(可省略),“charset”指定了连接时使用的字符集(可省略)。

DB_CONNECT_STRING="mysql+mysqldb: //root:123@localhost/ooxx?charset=utf8"

create_engine() 会返回一个数据库引擎,echo 参数为 True 时,会显示每条执行的 SQL 语句,生产环境下可关闭。

引擎=create_engine(DB_CONNECT_STRING, echo=True)

sessionmaker() 会生成一个数据库会话类。这个类的实例可以当成一个数据库连接,它同时还记录了一些查询的数据,并决定什么时候执行 SQL 语句。由于 SQLAlchemy 自己维护了一个数据库连接池(默认 5 个连接),因此初始化一个会话的开销并不大。对 Tornado 而言,可以在 BaseHandler 的 initialize() 里初始化:

DB_Session=sessionmaker(绑定=引擎)

会话=DB_Session()

代码如下:

session.execute("创建数据库abc")

print session.execute("显示数据库").fetchall()

session.execute("使用abc")

建 user 表的过程略

print session.execute("从id=1 的用户中选择*").first()

print session.execute("select * from user where id=:id", {"id": 1}).first()

定义一个表:

从sqlalchemy 导入列

从sqlalchemy.types 导入CHAR、整数、字符串

从sqlalchemy.ext.declarative 导入declarative_base

BaseModel=declarative_base()

def init_db():

BaseModel.metadata.create_all(引擎)

def drop_db():

BaseModel.metadata.drop_all(引擎)

用户类(基础模型):

tablename="用户"

id=列(整数,primary_key=True)

名称=Column(CHAR(30)) # 或Column(String(30))

初始化数据库()

从sqlalchemy.ext.declarative 导入declarative_base

从sqlalchemy 导入列、整数、字符串

从sqlalchemy.orm 导入sessionmaker

从sqlalchemy 导入create_engine

DB_CONNECT_STRING = "mysql_mysqldb://root:0127@localhost/ooxx?charset=utf8"

DB_CONNECT_STRING="mysql+mysqldb://root:0127@172.18.50.7/test"

引擎=create_engine(DB_CONNECT_STRING,echo=True)

DB_Session=sessionmaker(绑定=引擎)

会话=DB_Session()

基础=声明性_基础()

BaseModel.metadata.create_all(engine) 会找到 BaseModel 的所有子类,并在数据库中建立这些表

类用户(Base):

tablename属性就是数据库中该表的名称

tablename=“用户”

id=列(整数,primary_key=True)

名称=列(字符串)

全名=列(字符串(30))

密码=列(字符串(30))

name = Column(CHAR(30))

ed_user=用户(名称="ll",全名="lil",密码="0829")

会话.添加(ed_user)

会话.commit()

查询=会话.查询(用户)

显示SQL 语句

打印查询

显示SQL 语句

打印查询.报表

遍历时查询

为查询:中的用户

打印用户名

返回的是一个类似列表的对象

打印查询.all()

print query.first().name # 当记录不存在时,first()将返回None

print query.one().name # 不存在,或有多行记录时会抛出异常

print query.filter(User.id==2).first().name

print query.get(2).name # 通过主键获取,相当于上一句

print query.filter("id=2").first().name # 支持字符串

query2=session.query(用户名)

print query2.all() # 每行都是一个元组

print query2.limit(1).all() # 最多返回1条记录

print query2.offset(1).all() # 从第二条记录开始返回

打印query2.order_by(用户名).all()

打印query2.order_by("name").all()

打印query2.order_by(User.name.desc()).all()

打印query2.order_by("name desc").all()

打印session.query(User.id).order_by(User.name.desc(), User.id).all()

print query2.filter(User.id==1).scalar() # 如果有记录,则返回第一条记录的第一个元素

print session.query("id").select_from(User).filter("id=1").scalar()

print query2.filter(User.id 1, User.name !="a").scalar() # 和

query3=query2.filter(User.id 1) # 多次拼接的过滤器也是和

query3=query3.filter(用户名!="a")

打印query3.scalar()

print query2.filter(or_(User.id==1, User.id==2)).all() # 或

print query2.filter(User.id.in_((1, 2))).all() # 在

query4=session.query(用户.id)

print query4.filter(User.name==None).scalar()

print query4.filter("名称为空").scalar()

print query4.filter(not_(User.name==None)).all() # 不

print query4.filter(User.name !=None).all()

打印query4.count()

print session.query(func.count("")).select_from(User).scalar()

print session.query(func.count("1")).select_from(User).scalar()

打印session.query(func.count(User.id)).scalar()

print session.query(func.count("")).filter(User.id 0).scalar() # filter()包含User,所以不需要指定表

print session.query(func.count("*")).filter(User.name=="a").limit(1).scalar()==1 # 可以使用limit() 来限制返回count() 数量

打印session.query(func.sum(User.id)).scalar()

print session.query(func.now()).scalar() # func 后面可以跟任何函数名,只要数据库支持

打印session.query(func.current_timestamp()).scalar()

print session.query(func.md5(User.name)).filter(User.id==1).scalar()

query.filter(User.id==1).update({User.name: "c"})

用户=查询.get(1)

打印用户名

用户名="d"

session.flush() # 写入数据库但不提交

打印query.get(1).name

会话.删除(用户)

会话.flush()

打印查询.get(1)

会话.回滚()

打印query.get(1).name

query.filter(User.id==1).delete()

会话.commit()

打印查询.get(1)

通过Session的query()方法创建一个查询对象。该函数的参数数量是可变的,参数可以是任何类或类描述的集合。下面是迭代输出User类的例子:

例如在session.query(User).order_by(User.id): 中

打印实例.名称,实例.全名

Query 还支持ORM 描述作为参数。任何时候,多类实体或基于列的实体表示都可以用作query() 函数的参数,返回类型是元组:

对于名称,session.query 中的全名(User.name,User.fullname):

打印姓名、全名

关于高效数据库操作:Python与Sqlalchemy最佳实践,的介绍到此结束,希望对大家有所帮助。

用户评论

珠穆郎马疯@

终于开始学习 SQLAlchemy 了,期待能写出高效的SQL语句!

    有11位网友表示赞同!

冷嘲热讽i

之前用的 ORM 太不灵活了,希望 SQLAlchemy 能帮我解决这个问题。

    有7位网友表示赞同!

颓废i

听说 SQLAlchemy 可以连接各种数据库,这太牛了吧!

    有20位网友表示赞同!

一笑抵千言

准备用 Python 和 SQLAlchemy 做个数据分析项目,希望能更快更方便地处理数据!

    有20位网友表示赞同!

杰克

学习 SQLAlchemy 的文档有点复杂啊,需要多花点时间理解。

    有10位网友表示赞同!

你tm的滚

发现 SQLAlchemy 非常适合写大型项目的数据库操作代码。

    有17位网友表示赞同!

执妄

和原生 SQL 比起来,SQLAlchemy 可读性更高,更容易维护。

    有18位网友表示赞同!

各自安好ぃ

这几天在尝试 SQLAlchemy 的 ORM 功能,感觉还挺不错的!

    有19位网友表示赞同!

陌上花

最近看到一些很厉害的 Python 项目都用到了 SQLAlchemy,真的很想学习一下。

    有13位网友表示赞同!

心安i

SQLAlchemy 最好的一点就是可以自动生成数据库表结构了。太棒了!”

    有10位网友表示赞同!

醉红颜

我已经把 Python 和 SQLAlchemy 用在一起做了很多小项目,感觉非常好用!

    有12位网友表示赞同!

哥帅但不是蟋蟀

在找资料的时候看到 SQLAlchemy 被很多人推荐,就决定试试看。

    有13位网友表示赞同!

巷口酒肆

我想问一下,SQLAlchemy 学习起来难吗?

    有15位网友表示赞同!

冷落了♂自己·

有没有人能给我讲讲 SQLAlchemy 的优缺点呢?

    有8位网友表示赞同!

久爱不厌

想用 SQLAlchemy 写个简单的数据库脚本,不知道哪些组件需要学习?

    有6位网友表示赞同!

逃避

我比较想了解 SQLAlchemy 和 Django 的区别。

    有6位网友表示赞同!

小清晰的声音

SQLAlchemy 能够帮助我们更容易地进行数据迁移吗?

    有15位网友表示赞同!

最迷人的危险

有没有什么好的资源可以让我快速上手 SQLAlchemy?

    有12位网友表示赞同!

【高效数据库操作:Python与Sqlalchemy最佳实践】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:琅琊令:探寻身世之谜,漫步迷蒙红尘 下一篇:探索玫瑰人生:一场关于美丽与梦想的旅程