sqlalchemy 是一个企业级的orm框架
| 类似于Django 的orm框架---》只能用在django框架中,不能用在别的位置 |
| |
| sqlalchemy可以单独使用,也可以用在其他框架中 |
安装
SQLAlchemy本身无法操作数据库,其必须依赖pymsql等第三方插件
| |
| MySQL-Python |
| mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> |
| |
| pymysql |
| mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] |
| |
| MySQL-Connector |
| mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> |
| |
| cx_Oracle |
| oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...] |
| |
| 更多:http://docs.sqlalchemy.org/en/latest/dialects/index.html |
sqlalchemy原生操作
| |
| import pymysql |
| import threading |
| |
| |
| from sqlalchemy import create_engine |
| from sqlalchemy.engine.base import Engine |
| |
| |
| engine = create_engine( |
| "mysql+pymysql://root:1234@127.0.0.1:3306/cnblogs", |
| max_overflow=0, |
| pool_size=5, |
| pool_timeout=30, |
| pool_recycle=-1 |
| ) |
| |
| |
| conn = engine.raw_connection() |
| |
| |
| cursor=conn.cursor(pymysql.cursors.DictCursor) |
| cursor.execute('select * from article limit 10') |
| res=cursor.fetchall() |
| |
| print(res) |
| |
| |
| def task(arg): |
| conn = engine.raw_connection() |
| cursor = conn.cursor() |
| cursor.execute( |
| "select * from article" |
| ) |
| result = cursor.fetchall() |
| print(result) |
| cursor.close() |
| conn.close() |
| |
| for i in range(20): |
| t = threading.Thread(target=task, args=(i,)) |
| t.start() |
sqlalchemy操作表
创建删除表
| |
| import datetime |
| from sqlalchemy import create_engine |
| from sqlalchemy.orm import declarative_base |
| from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index |
| |
| Base = declarative_base() |
| |
| |
| class User(Base): |
| __tablename__ = 'users' |
| |
| id = Column(Integer, primary_key=True, autoincrement=True) |
| name = Column(String(32), index=True, nullable=False) |
| email = Column(String(32), unique=True) |
| |
| ctime = Column(DateTime, default=datetime.datetime.now) |
| extra = Column(Text) |
| |
| |
| |
| |
| |
| |
| engine = create_engine( |
| "mysql+pymysql://root:1234@127.0.0.1:3306/sqlalchemy01", |
| max_overflow=0, |
| pool_size=5, |
| pool_timeout=30, |
| pool_recycle=-1 |
| ) |
| |
| |
| Base.metadata.create_all(engine) |
| |
| |
| Base.metadata.drop_all(engine) |
简单增删改查操作
| from models import User |
| |
| from sqlalchemy import create_engine |
| |
| |
| engine = create_engine( |
| "mysql+pymysql://root:1234@127.0.0.1:3306/sqlalchemy01", |
| max_overflow=0, |
| pool_size=5, |
| pool_timeout=30, |
| pool_recycle=-1 |
| ) |
| |
| |
| from sqlalchemy.orm import sessionmaker |
| |
| Connection = sessionmaker(bind=engine) |
| conn = Connection() |
| |
| |
| |
| user = User(name='xxx', email='3@qq.com') |
| |
| conn.add(user) |
| |
| conn.commit() |
| |
| conn.close() |
| |
| |
| |
| res=conn.query(User).filter_by(id=1).all() |
| print(res) |
| |
| |
| res = conn.query(User).filter_by(name='lqz').delete() |
| print(res) |
| conn.commit() |
| |
| |
| res=conn.query(User).filter_by(name='9999').update({'extra':'xxsss'}) |
| conn.commit() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通