SQLAlchemy基础篇(连接mysql数据库)

10 篇文章 0 订阅
3 篇文章 0 订阅
安装mysql和sqlalchemy就不说了,googol之。
简单介绍下最基本的使用:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker


DB_CONNECT_STRING = 'mysql+mysqldb://root:123@localhost/ooxx?charset=utf8'
engine = create_engine(DB_CONNECT_STRING, echo=True)
DB_Session = sessionmaker(bind=engine)
session = DB_Session()


这里的 DB_CONNECT_STRING 就是连接数据库的路径。“mysql+mysqldb”指定了使用 MySQL-Python 来连接,“root”和“123”分别是用户名和密码,“localhost”是数据库的域名,“ooxx”是使用的数据库名(可省略),“charset”指定了连接时使用的字符集(可省略)。
create_engine() 会返回一个数据库引擎,echo 参数为 True 时,会显示每条执行的 SQL 语句,生产环境下可关闭。
sessionmaker() 会生成一个数据库会话类。这个类的实例可以当成一个数据库连接,它同时还记录了一些查询的数据,并决定什么时候执行 SQL 语句。由于 SQLAlchemy 自己维护了一个数据库连接池(默认 5 个连接),因此初始化一个会话的开销并不大。

拿到 session 后,就可以执行 SQL 了:

session.execute('create database abc')
print session.execute('show databases').fetchall()
session.execute('use abc')

不过这和直接使用 MySQL-Python 没啥区别,所以就不介绍了;我还是喜欢 ORM (Object Relational Mapping框架采用元数据来描述对象一关系映射细节)的方式,这也是我采用 SQLAlchemy 的唯一原因。

于是来定义一个表:

from sqlalchemy import Column
from sqlalchemy.types import CHAR, Integer, String
from sqlalchemy.ext.declarative import declarative_base


BaseModel = declarative_base()

def init_db():
    BaseModel.metadata.create_all(engine)

def drop_db():
    BaseModel.metadata.drop_all(engine)


class User(BaseModel):
    __tablename__ = 'user'

    id = Column(Integer, primary_key=True)
    name = Column(CHAR(30)) # or Column(String(30))

init_db()

 

declarative_base() 创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联。
以 User 类为例,它的 __tablename__ 属性就是数据库中该表的名称,它有 id 和 name 这两个字段,分别为整型和 30 个定长字符。Column 还有一些其他的参数,我就不解释了。
最后,BaseModel.metadata.create_all(engine) 会找到 BaseModel 的所有子类,并在数据库中建立这些表;drop_all() 则是删除这些表。

接着就开始使用这个表吧:

from sqlalchemy import func, or_, not_


user = User(name='a')
session.add(user)
user = User(name='b')
session.add(user)
user = User(name='a')
session.add(user)
user = User()
session.add(user)
session.commit()

query = session.query(User)
print query # 显示SQL 语句
print query.statement # 同上
for user in query: # 遍历时查询
    print user.name
print query.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(User.name)
print query2.all() # 每行是个元组
print query2.limit(1).all() # 最多返回 1 条记录
print query2.offset(1).all() # 从第 2 条记录开始返回
print query2.order_by(User.name).all()
print query2.order_by('name').all()
print query2.order_by(User.name.desc()).all()
print query2.order_by('name desc').all()
print 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() # and
query3 = query2.filter(User.id > 1) # 多次拼接的 filter 也是 and
query3 = query3.filter(User.name != 'a')
print query3.scalar()
print query2.filter(or_(User.id == 1, User.id == 2)).all() # or
print query2.filter(User.id.in_((1, 2))).all() # in

query4 = session.query(User.id)
print query4.filter(User.name == None).scalar()
print query4.filter('name is null').scalar()
print query4.filter(not_(User.name == None)).all() # not
print query4.filter(User.name != None).all()

print query4.count()
print session.query(func.count('*')).select_from(User).scalar()
print session.query(func.count('1')).select_from(User).scalar()
print 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() 的返回数
print session.query(func.sum(User.id)).scalar()
print session.query(func.now()).scalar() # func 后可以跟任意函数名,只要该数据库支持
print 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'})
user = query.get(1)
print user.name

user.name = 'd'
session.flush() # 写数据库,但并不提交
print query.get(1).name

session.delete(user)
session.flush()
print query.get(1)

session.rollback()
print query.get(1).name
query.filter(User.id == 1).delete()
session.commit()
print query.get(1)


增删改查都涉及到了,自己看看输出的 SQL 语句就知道了,于是基础知识就介绍到此了。

 以下链接是进阶的知识:

http://blog.csdn.net/u011510825/article/details/47310671


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用SQLAlchemy连接MySQL数据库的步骤如下: 1. 安装SQLAlchemy库 可以使用pip命令进行安装: ``` pip install sqlalchemy ``` 2. 导入SQLAlchemy库 在Python代码中导入SQLAlchemy库: ``` from sqlalchemy import create_engine ``` 3. 创建数据库连接 使用create_engine函数创建数据库连接,需要指定MySQL数据库连接信息,例如: ``` engine = create_engine('mysql+pymysql://username:password@host:port/database') ``` 其中,username是MySQL数据库的用户名,password是密码,host是MySQL服务器的地址,port是MySQL服务器的端口号,database是要连接数据库名称。 4. 创建数据库会话 使用create_session函数创建数据库会话,例如: ``` from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) session = Session() ``` 5. 执行SQL语句 使用session对象执行SQL语句,例如: ``` result = session.execute('SELECT * FROM table_name') ``` 其中,table_name是要查询的表名。 6. 关闭数据库会话 使用session对象关闭数据库会话,例如: ``` session.close() ``` 以上就是使用SQLAlchemy连接MySQL数据库的基本步骤。 ### 回答2: SQLAlchemy是一个Python的ORM(对象关系映射)框架,提供了一种操作多种数据库的方式。在使用SQLAlchemy连接MySQL数据库时,需要先安装MySQL Connector/Python或PyMySQL驱动程序。其中MySQL Connector/Python是官方提供的MySQL驱动程序,而PyMySQL是Python MySQL客户端库之一。 首先,需要在Python中导入SQLAlchemy和相应的驱动程序。如使用MySQL Connector/Python: ``` import mysql.connector from sqlalchemy import create_engine ``` 如使用PyMySQL: ``` import pymysql from sqlalchemy import create_engine ``` 接着,需要创建一个数据库引擎(engine),并指定连接数据库的URL,其中包括主机、端口、数据库名称、用户名和密码等信息。如使用MySQL Connector/Python: ``` # 创建数据库引擎 engine = create_engine("mysql+mysqlconnector://username:password@hostname:port/database") # 连接数据库 conn = engine.connect() # 执行SQL语句 result = conn.execute("SELECT * FROM table") # 关闭连接 conn.close() ``` 其中,username和password是连接MySQL数据库的用户名和密码,hostname是MySQL服务器的主机名或IP地址,port是MySQL服务器的端口号(默认为3306),database是所要连接数据库的名称。 如使用PyMySQL: ``` # 创建数据库引擎 engine = create_engine("mysql+pymysql://username:password@hostname:port/database") # 连接数据库 conn = engine.connect() # 执行SQL语句 result = conn.execute("SELECT * FROM table") # 关闭连接 conn.close() ``` 需要注意的是,MySQL Connector/Python和PyMySQL连接URL格式略有不同。在使用MySQL Connector/Python时,URL中需要指定mysql+mysqlconnector;而在使用PyMySQL时,URL中需要指定mysql+pymysql。在其他方面,两者的使用方法大同小异。 总的来说,使用SQLAlchemy连接MySQL数据库非常方便。只需安装相应的驱动程序,创建数据库引擎,连接数据库,执行SQL语句即可实现与MySQL数据库的交互。同时,SQLAlchemy提供了良好的抽象层,可以帮助开发者更加简单、高效地访问数据库。 ### 回答3: SQLAlchemy是一个Python ORM库,它提供了许多方便的接口和高效的数据访问方法,让Python开发者可以轻松地与各种关系型数据库交互。MySQL是一个流行的开源数据库SQLAlchemy库可以与MySQL数据库进行交互。下面是连接MySQL数据库的步骤: 1. 安装MySQL Connector Python 要连接MySQL数据库,首先需要安装MySQL Connector Python,这是MySQL官方提供的Python数据库驱动程序。可以使用pip命令安装,如下所示: ``` pip install mysql-connector-python ``` 2. 创建Engine对象 在Python中与MySQL数据库交互,需要创建Engine对象。Engine是SQLAlchemy最重要的对象之一,它用于处理所有与数据库的交互。代码示例如下: ```python from sqlalchemy import create_engine engine = create_engine('mysql+mysqlconnector://user:password@localhost:port/dbname') ``` 在创建Engine对象的时候,需要传入MySQL数据库连接信息。连接信息包括数据库的用户名、密码、主机地址和端口号等信息。 3. 创建Session对象 在与MySQL数据库交互时,可以使用Session对象来执行SQL查询语句。Session对象可以通过Engine对象创建。代码示例如下: ```python from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) session = Session() ``` 在创建Session对象之前,需要安装SQLAlchemy的ORM库。可以使用pip命令进行安装: ``` pip install sqlalchemy ``` 4. 执行SQL语句 通过Session对象执行SQL语句,可以使用Session对象提供的许多方法。例如,可以使用Query对象查询表中的所有记录。代码示例如下: ```python from sqlalchemy.orm import Query query = Query(cls).select_from(cls) data = session.execute(query).fetchall() print(data) ``` 以上就是使用SQLAlchemy连接MySQL数据库的步骤。需要注意的是,连接信息需要根据自己的情况进行相应的修改。通过这种方式连接MySQL数据库,可以快速方便地执行各种SQL查询语句,方便开发者进行数据交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值