三、使用Core API访问与操作数据库
Sqlalchemy 的Core部分集成了DB API, 事务管理,schema描述等功能,ORM构筑于其上。本章介绍创建 Engine对象,使用基本的 Sql Express Language 方法,以及如何实现对数据库的CRUD操作等内容。
1、创建DB engine 对象
1.1创建database engine 对象
Engine 是db连接管理类,
语法:
from sqlalchemy import create_engine
#创建引擎对象
engine = create_engine("sqlite:///:memory:", echo=True)
#连接数据库
conn = engine.connect()
Sqlalchemy.create_engine( ) 方法第1个参数是db连接表达式,格式为:
dialect[+driver]://user:password@host/dbname
- dialect 通常为数据库类型,如sqlite, mysql, mongodb, etc.
- driver 是python 访问数据库的包。
如 sqlite+sqlite3, mysql+mysqlconnector
1.2 连接至各类数据库的配置
1.2.1 sqlite 连接
上面示例是sqlite的连接表达式。 Driver是python访问数据库的DBAPI库。
e = create_engine('sqlite:///path/to/database.db')
如果是绝对地址 sqlite:////usr/local/myproject/database.db
:memory 表示使用内存数据库,不保存在硬盘。
对于windows 系统,
e = create_engine('sqlite:///C:\\myapp\\db\\main.db')
1.2.2 连接mysql
Mysql 的DBAPI,常用的有PyMysql 与 mysql-connector,其连接表达式分别为:
mysql+pymysql://root:123456@192.168.99.240:3306/testdb
mysql+mysqlconnector://roprot:123456@192.168.99.240:3306/testdb
1.2.3 连接PostgreSQL
通常使用的接口库为 psycopg2
postgresql+psycopg2://user:password@host:port/dbname[?key=value&key=value...]
engine = create_engine(
"postgresql+psycopg2://scott:tiger@localhost/test",
isolation_level="SERIALIZABLE",
)
Ssl连接
engine = sa.create_engine(
"postgresql+psycopg2://scott:[email protected]:5432/test?sslmode=require"
)
1.2.4 连接MongoDB
engine = create_engine("mongodb:///?Server=MyServer&Port=27017&Database=test&User=test&Password=Password")
定义1个mapping类
base = declarative_base()
class restaurants(base):
__tablename__ = "restaurants"
borough = Column(String,primary_key=True)
cuisine = Column(String)
查询:
engine=create_engine("mongodb:///?Server=MyServer&Port=27017&Database=test&User=test&Password=Password")
factory = sessionmaker(bind=engine)
session = factory()
for instance in session.query(restaurants).filter_by(Name="Morris Park Bake Shop"):
print("borough: ", instance.borough)
print("cuisine: ", instance.cuisine)
print("---------")
1.3创建connect 对象
语法:
conn = engine.connect()
如
e = create_engine('sqlite:///C:\\myapp\\db\\main.db')
conn = e.connect()
推荐使用context with 语法使用connect对象
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///C:\\myapp\\db\\main.db')
with engine.connect() as connection:
result = connection.execute(text("select username from users"))
for row in result:
print("username:", row["username"])
如果修改了数据,应调用 conn.commit() 提交transaction
2. SQL Express Language SQL表达式常用方法
Sqlalchemy SQL Express Language是对SQL的封装,在传参、获取返回值等方面更加方便。
2.1 使用 text() 生成SQL Express语句
text()方法是CoreAPI中最基础的方法之一,主要作用,用于封装 sql 语句
from sqlalchemy import text
t_sql = text("SELECT * FROM users")
result = connection.execute(t_sql