其实高效数据库操作: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最佳实践,的介绍到此结束,希望对大家有所帮助。
【高效数据库操作:Python与Sqlalchemy最佳实践】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于开始学习 SQLAlchemy 了,期待能写出高效的SQL语句!
有11位网友表示赞同!
之前用的 ORM 太不灵活了,希望 SQLAlchemy 能帮我解决这个问题。
有7位网友表示赞同!
听说 SQLAlchemy 可以连接各种数据库,这太牛了吧!
有20位网友表示赞同!
准备用 Python 和 SQLAlchemy 做个数据分析项目,希望能更快更方便地处理数据!
有20位网友表示赞同!
学习 SQLAlchemy 的文档有点复杂啊,需要多花点时间理解。
有10位网友表示赞同!
发现 SQLAlchemy 非常适合写大型项目的数据库操作代码。
有17位网友表示赞同!
和原生 SQL 比起来,SQLAlchemy 可读性更高,更容易维护。
有18位网友表示赞同!
这几天在尝试 SQLAlchemy 的 ORM 功能,感觉还挺不错的!
有19位网友表示赞同!
最近看到一些很厉害的 Python 项目都用到了 SQLAlchemy,真的很想学习一下。
有13位网友表示赞同!
SQLAlchemy 最好的一点就是可以自动生成数据库表结构了。太棒了!”
有10位网友表示赞同!
我已经把 Python 和 SQLAlchemy 用在一起做了很多小项目,感觉非常好用!
有12位网友表示赞同!
在找资料的时候看到 SQLAlchemy 被很多人推荐,就决定试试看。
有13位网友表示赞同!
我想问一下,SQLAlchemy 学习起来难吗?
有15位网友表示赞同!
有没有人能给我讲讲 SQLAlchemy 的优缺点呢?
有8位网友表示赞同!
想用 SQLAlchemy 写个简单的数据库脚本,不知道哪些组件需要学习?
有6位网友表示赞同!
我比较想了解 SQLAlchemy 和 Django 的区别。
有6位网友表示赞同!
SQLAlchemy 能够帮助我们更容易地进行数据迁移吗?
有15位网友表示赞同!
有没有什么好的资源可以让我快速上手 SQLAlchemy?
有12位网友表示赞同!