pythonormsqlite3_Python3+SQLAlchemy+Sqlite3实现ORM教程

本文介绍了如何在Python3中使用SQLAlchemy库操作SQLite3数据库,包括安装、ORM操作、创建数据库连接、定义映射、创建数据表、建立会话、增查改删(CRUD)操作以及直接执行SQL语句。通过示例代码详细展示了如何创建数据库引擎、定义User映射类、插入和查询数据,强调了参数传递和会话管理的重要性。
摘要由CSDN通过智能技术生成

一、安装

Sqlite3是Python3标准库不需要另外安装,只需要安装SQLAlchemy即可。本文sqlalchemy版本为1.2.12

pip install sqlalchemy

二、ORM操作

除了第一步创建引擎时连接URL不一样,其他操作其他mysql等数据库和sqlite都是差不多的。

2.1 创建数据库连接格式说明

sqlite创建数据库连接就是创建数据库,而其他mysql等应该是需要数据库已存在才能创建数据库连接;建立数据库连接本文中有时会称为建立数据库引擎。

2.1.1 sqlite创建数据库连接

以相对路径形式,在当前目录下创建数据库格式如下:

# sqlite:///

# where is relative:

engine = create_engine('sqlite:///foo.db')

以绝对路径形式创建数据库,格式如下:

#Unix/Mac - 4 initial slashes in total

engine = create_engine('sqlite:absolute/path/to/foo.db')

#Windows

engine = create_engine('sqlite:///C:\\path\\to\\foo.db')

#Windows alternative using raw string

engine = create_engine(r'sqlite:///C:\path\to\foo.db')

sqlite可以创建内存数据库(其他数据库不可以),格式如下:

# format 1

engine = create_engine('sqlite://')

# format 2

engine = create_engine('sqlite:///:memory:', echo=True)

2.1.2 其他数据库创建数据库连接

PostgreSQL:

# default

engine = create_engine('postgresql://scott:tiger@localhost/mydatabase')

# psycopg2

engine = create_engine('postgresql+psycopg2://scott:tiger@localhost/mydatabase')

# pg8000

engine = create_engine('postgresql+pg8000://scott:tiger@localhost/mydatabase')

MySQL:

# default

engine = create_engine('mysql://scott:tiger@localhost/foo')

# mysql-python

engine = create_engine('mysql+mysqldb://scott:tiger@localhost/foo')

# MySQL-connector-python

engine = create_engine('mysql+mysqlconnector://scott:tiger@localhost/foo')

# OurSQL

engine = create_engine('mysql+oursql://scott:tiger@localhost/foo')

Oracle:

engine = create_engine('oracle://scott:tiger@127.0.0.1:1521/sidname')

engine = create_engine('oracle+cx_oracle://scott:tiger@tnsname')

MSSQL:

# pyodbc

engine = create_engine('mssql+pyodbc://scott:tiger@mydsn')

# pymssql

engine = create_engine('mssql+pymssql://scott:tiger@hostname:port/dbname')

2.2 创建数据库连接

我们以在当前目录下创建foo.db为例,后续各步同使用此数据库。

在create_engine中我们多加了两样东西,一个是echo=Ture,一个是check_same_thread=False。

echo=Ture----echo默认为False,表示不打印执行的SQL语句等较详细的执行信息,改为Ture表示让其打印。

check_same_thread=False----sqlite默认建立的对象只能让建立该对象的线程使用,而sqlalchemy是多线程的所以我们需要指定check_same_thread=False来让建立的对象任意线程都可使用。否则不时就会报错:sqlalchemy.exc.ProgrammingError: (sqlite3.ProgrammingError) SQLite objects created in a thread can only be used in that same thread. The object was created in thread id 35608 and this is thread id 34024. [SQL: 'SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.password AS users_password \nFROM users \nWHERE users.name = ?\n LIMIT ? OFFSET ?']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值