Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
✨ NoneBot 数据库支持插件 ✨
pip install nonebot-plugin-orm
poetry add nonebot-plugin-orm
pdm add nonebot-plugin-orm
# 无需配置、开箱即用的默认依赖
pip install nonebot-plugin-orm[default]
# 特定数据库后端的依赖
pip install nonebot-plugin-orm[mysql]
pip install nonebot-plugin-orm[postgresql]
pip install nonebot-plugin-orm[sqlite]
# 特定数据库驱动的依赖
pip install nonebot-plugin-orm[asyncmy]
pip install nonebot-plugin-orm[aiomysql]
pip install nonebot-plugin-orm[psycopg]
pip install nonebot-plugin-orm[asyncpg]
pip install nonebot-plugin-orm[aiosqlite]
from nonebot.adapters import Event
from nonebot.params import Depends
from nonebot import require, on_message
from sqlalchemy.orm import Mapped, mapped_column
require("nonebot_plugin_orm")
from nonebot_plugin_orm import Model, async_scoped_session
matcher = on_message()
def get_user_id(event: Event) -> str:
return event.get_user_id()
class User(Model):
id: Mapped[int] = mapped_column(primary_key=True)
user_id: Mapped[str] = Depends(get_user_id)
@matcher.handle()
async def _(event: Event, sess: async_scoped_session, user: User | None):
if user:
await matcher.finish(f"Hello, {user.user_id}")
sess.add(User(user_id=get_user_id(event)))
await sess.commit()
await matcher.finish("Hello, new user!")
from sqlalchemy import select
from nonebot.adapters import Event
from nonebot.params import Depends
from nonebot import require, on_message
from sqlalchemy.orm import Mapped, mapped_column
require("nonebot_plugin_orm")
from nonebot_plugin_orm import Model, SQLDepends, async_scoped_session
matcher = on_message()
def get_session_id(event: Event) -> str:
return event.get_session_id()
class Session(Model):
id: Mapped[int] = mapped_column(primary_key=True)
session_id: Mapped[str]
@matcher.handle()
async def _(
event: Event,
sess: async_scoped_session,
session: Session
| None = SQLDepends(
select(Session).where(Session.session_id == Depends(get_session_id))
),
):
if session:
await matcher.finish(f"Hello, {session.session_id}")
sess.add(Session(session_id=get_session_id(event)))
await sess.commit()
await matcher.finish("Hello, new user!")
依赖 NB CLI
$ nb orm
Usage: nb orm [OPTIONS] COMMAND [ARGS]...
Options:
-c, --config FILE 可选的配置文件;默认为 ALEMBIC_CONFIG 环境变量的值,或者 "alembic.ini"(如果存在)
-n, --name TEXT .ini 文件中用于 Alembic 配置的小节的名称 [default: alembic]
-x TEXT 自定义 env.py 脚本使用的其他参数,例如:-x setting1=somesetting -x
setting2=somesetting
-q, --quite 不要输出日志到标准输出
--help Show this message and exit.
Commands:
branches 显示所有的分支。
check 检查数据库是否与模型定义一致。
current 显示当前的迁移。
downgrade 回退到先前版本。
edit 使用 $EDITOR 编辑迁移脚本。
ensure_version 创建版本表。
heads 显示所有的分支头。
history 显示迁移的历史。
init 初始化脚本目录。
list_templates 列出所有可用的模板。
merge 合并多个迁移。创建一个新的迁移脚本。
revision 创建一个新迁移脚本。
show 显示迁移的信息。
stamp 将数据库标记为特定的迁移版本,不运行任何迁移。
upgrade 升级到较新版本。
默认数据库连接 URL。 参见:Engine Configuration — SQLAlchemy 2.0 Documentation
SQLALCHEMY_DATABASE_URL=sqlite+aiosqlite://
bind keys 到 AsyncEngine
选项的映射。值可以是数据库连接 URL、AsyncEngine
选项字典或者 AsyncEngine
实例。
SQLALCHEMY_BINDS='{
"": "sqlite+aiosqlite://",
"nonebot_plugin_user": {
"url": "postgresql+asyncpg://scott:tiger@localhost/mydatabase",
"echo": true
}
}'
所有 AsyncEngine
的 echo
和 echo_pool
选项的默认值。用于快速调试连接和 SQL 生成问题。
SQLALCHEMY_ECHO=true
所有 AsyncEngine
的默认选项字典。
参见:Engine Configuration — SQLAlchemy 2.0 Documentation
SQLALCHEMY_ENGINE_OPTIONS='{
"pool_size": 5,
"max_overflow": 10,
"pool_timeout": 30,
"pool_recycle": 3600,
"echo": true
}'
AsyncSession
的选项字典。
参见:Session API — SQLAlchemy 2.0 Documentation
SQLALCHEMY_SESSION_OPTIONS='{
"autoflush": false,
"autobegin": true,
"expire_on_commit": true
}'
配置文件路径或 AlembicConfig
实例。
ALEMBIC_CONFIG=alembic.ini
脚本目录路径。
ALEMBIC_SCRIPT_LOCATION=migrations
迁移脚本目录路径或分支标签到迁移脚本目录路径的映射。
ALEMBIC_VERSION_LOCATIONS=migrations/versions
ALEMBIC_VERSION_LOCATIONS='{
"": "migrations/versions",
"nonebot_plugin_user": "src/nonebot_plugin_user/versions",
"nonebot_plugin_chatrecorder": "migrations/versions/nonebot_plugin_chatrecorder"
}'
MigrationContext
的选项字典。
参见:Runtime Objects — Alembic 1.12.0 documentation
ALEMBIC_CONTEXT='{
"render_as_batch": true
}'
是否在启动时检查数据库与模型定义的一致性。
ALEMBIC_STARTUP_CHECK=true
FAQs
SQLAlchemy ORM support for nonebot
We found that nonebot-plugin-orm demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.