Skip to content

Commit 9916902

Browse files
🐛 修复 postgresql 标识符大于63字符的错误 (#545)
* 🗃️ 自定义表名 * ➕ 添加开发依赖 nonebot-plugin-orm[postgresql] * 🗃️ postgresql 跳过所有旧迁移脚本 * 🗃️ 修正方言 * 🗃️ 添加迁移脚本 * 🚨 auto fix by pre-commit hooks * 🚨 添加一个 noqa( --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent e347b41 commit 9916902

34 files changed

+2448
-1153
lines changed

nonebot_plugin_tetris_stats/config/migrations/09d4bb60160d_rename_field.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
def upgrade(name: str = '') -> None:
2626
if name:
2727
return
28+
if op.get_bind().dialect.name == 'postgresql':
29+
return
2830
# ### commands auto generated by Alembic - please adjust! ###
2931
with op.batch_alter_table('nonebot_plugin_tetris_stats_iorank', schema=None) as batch_op:
3032
batch_op.alter_column('create_time', new_column_name='update_time', existing_type=sa.DateTime())
@@ -41,6 +43,8 @@ def upgrade(name: str = '') -> None:
4143
def downgrade(name: str = '') -> None:
4244
if name:
4345
return
46+
if op.get_bind().dialect.name == 'postgresql':
47+
return
4448
# ### commands auto generated by Alembic - please adjust! ###
4549
with op.batch_alter_table('nonebot_plugin_tetris_stats_iorank', schema=None) as batch_op:
4650
batch_op.alter_column('update_time', new_column_name='create_time')

nonebot_plugin_tetris_stats/config/migrations/0d50142b780f_add_field.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
def upgrade(name: str = '') -> None:
2626
if name:
2727
return
28+
if op.get_bind().dialect.name == 'postgresql':
29+
return
2830
# ### commands auto generated by Alembic - please adjust! ###
2931
with op.batch_alter_table('nonebot_plugin_tetris_stats_iorank', schema=None) as batch_op:
3032
batch_op.add_column(sa.Column('file_hash', sa.String(length=128), nullable=True))
@@ -38,6 +40,8 @@ def upgrade(name: str = '') -> None:
3840
def downgrade(name: str = '') -> None:
3941
if name:
4042
return
43+
if op.get_bind().dialect.name == 'postgresql':
44+
return
4145
# ### commands auto generated by Alembic - please adjust! ###
4246
with op.batch_alter_table('nonebot_plugin_tetris_stats_iorank', schema=None) as batch_op:
4347
batch_op.drop_index(batch_op.f('ix_nonebot_plugin_tetris_stats_iorank_file_hash'))

nonebot_plugin_tetris_stats/config/migrations/3c25a5a8c050_refactor_historical.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
from nonebot.log import logger
1717
from rich.progress import BarColumn, MofNCompleteColumn, Progress, TaskProgressColumn, TextColumn, TimeRemainingColumn
1818
from sqlalchemy import desc, select
19-
from sqlalchemy.dialects import sqlite
2019
from sqlalchemy.ext.automap import automap_base
2120
from sqlalchemy.orm import Session
2221

@@ -109,6 +108,8 @@ def migrate_old_data() -> None: # noqa: C901
109108
def upgrade(name: str = '') -> None:
110109
if name:
111110
return
111+
if op.get_bind().dialect.name == 'postgresql':
112+
return
112113
# ### commands auto generated by Alembic - please adjust! ###
113114
op.create_table(
114115
'nonebot_plugin_tetris_stats_tetriohistoricaldata',
@@ -219,23 +220,25 @@ def upgrade(name: str = '') -> None:
219220
def downgrade(name: str = '') -> None:
220221
if name:
221222
return
223+
if op.get_bind().dialect.name == 'postgresql':
224+
return
222225
# ### commands auto generated by Alembic - please adjust! ###
223226
op.create_table(
224227
'nonebot_plugin_tetris_stats_historicaldata',
225-
sa.Column('id', sa.INTEGER(), nullable=False),
226-
sa.Column('trigger_time', sa.DATETIME(), nullable=False),
227-
sa.Column('bot_platform', sa.VARCHAR(length=32), nullable=True),
228-
sa.Column('bot_account', sa.VARCHAR(), nullable=True),
229-
sa.Column('source_type', sa.VARCHAR(length=32), nullable=True),
230-
sa.Column('source_account', sa.VARCHAR(), nullable=True),
231-
sa.Column('message', sa.BLOB(), nullable=True),
232-
sa.Column('game_platform', sa.VARCHAR(length=32), nullable=False),
233-
sa.Column('command_type', sa.VARCHAR(length=16), nullable=False),
234-
sa.Column('command_args', sqlite.JSON(), nullable=False),
235-
sa.Column('game_user', sqlite.JSON(), nullable=False),
236-
sa.Column('processed_data', sqlite.JSON(), nullable=False),
237-
sa.Column('finish_time', sa.DATETIME(), nullable=False),
238-
sa.Column('user_unique_identifier', sa.VARCHAR(length=32), nullable=False),
228+
sa.Column('id', sa.Integer(), nullable=False),
229+
sa.Column('trigger_time', sa.DateTime(), nullable=False),
230+
sa.Column('bot_platform', sa.String(length=32), nullable=True),
231+
sa.Column('bot_account', sa.String(), nullable=True),
232+
sa.Column('source_type', sa.String(length=32), nullable=True),
233+
sa.Column('source_account', sa.String(), nullable=True),
234+
sa.Column('message', sa.PickleType(), nullable=True),
235+
sa.Column('game_platform', sa.String(length=32), nullable=False),
236+
sa.Column('command_type', sa.String(length=16), nullable=False),
237+
sa.Column('command_args', sa.JSON(), nullable=False),
238+
sa.Column('game_user', sa.JSON(), nullable=False),
239+
sa.Column('processed_data', sa.JSON(), nullable=False),
240+
sa.Column('finish_time', sa.DateTime(), nullable=False),
241+
sa.Column('user_unique_identifier', sa.String(length=32), nullable=False),
239242
sa.PrimaryKeyConstraint('id', name='pk_nonebot_plugin_tetris_stats_historicaldata'),
240243
)
241244
with op.batch_alter_table('nonebot_plugin_tetris_stats_historicaldata', schema=None) as batch_op:
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
"""migrate nonebot_plugin_tetris_stats_tetrioleaguestats
2+
3+
迁移 ID: 3d900bb0e8d4
4+
父迁移: 405c6936a164
5+
创建时间: 2025-07-18 02:22:03.771903
6+
7+
"""
8+
9+
from __future__ import annotations
10+
11+
from typing import TYPE_CHECKING
12+
13+
from alembic import op
14+
from nonebot.log import logger
15+
from rich.progress import BarColumn, Progress, SpinnerColumn, TaskProgressColumn, TextColumn
16+
from sqlalchemy import inspect
17+
from sqlalchemy.ext.automap import automap_base
18+
from sqlalchemy.orm import Session
19+
20+
if TYPE_CHECKING:
21+
from collections.abc import Sequence
22+
23+
revision: str = '3d900bb0e8d4'
24+
down_revision: str | Sequence[str] | None = '405c6936a164'
25+
branch_labels: str | Sequence[str] | None = None
26+
depends_on: str | Sequence[str] | None = None
27+
28+
29+
def data_migrate() -> None:
30+
conn = op.get_bind()
31+
insp = inspect(conn)
32+
table_names = insp.get_table_names()
33+
if 'nonebot_plugin_tetris_stats_tetrioleaguestats' not in table_names:
34+
return
35+
36+
Base = automap_base() # noqa: N806
37+
Base.prepare(autoload_with=conn)
38+
Old = Base.classes.nonebot_plugin_tetris_stats_tetrioleaguestats # noqa: N806
39+
New = Base.classes.nb_t_io_tl_stats # noqa: N806
40+
41+
with Session(conn) as db_session:
42+
count = db_session.query(Old).count()
43+
if count == 0:
44+
return
45+
46+
logger.warning('tetris_stats: 正在迁移数据, 请不要关闭程序...')
47+
48+
with Progress(
49+
SpinnerColumn(),
50+
TextColumn('[progress.description]{task.description}'),
51+
BarColumn(),
52+
TaskProgressColumn(),
53+
) as progress:
54+
task = progress.add_task('迁移数据...', total=count)
55+
56+
for i in db_session.query(Old).yield_per(1):
57+
db_session.add(
58+
New(
59+
id=i.id,
60+
update_time=i.update_time,
61+
)
62+
)
63+
64+
progress.update(task, advance=1)
65+
66+
if progress.tasks[task].completed % 100 == 0:
67+
db_session.commit()
68+
69+
db_session.commit()
70+
71+
logger.success('tetris_stats: 数据迁移完成!')
72+
73+
74+
def upgrade(name: str = '') -> None:
75+
if name:
76+
return
77+
data_migrate()
78+
79+
80+
def downgrade(name: str = '') -> None:
81+
if name:
82+
return
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
"""migrate nonebot_plugin_tetris_stats_tetrioleaguehistorical
2+
3+
迁移 ID: 405c6936a164
4+
父迁移: bbbdfd94e6fa
5+
创建时间: 2025-07-18 01:55:27.406032
6+
7+
"""
8+
9+
from __future__ import annotations
10+
11+
from typing import TYPE_CHECKING
12+
13+
from alembic import op
14+
from nonebot.log import logger
15+
from rich.progress import BarColumn, Progress, SpinnerColumn, TaskProgressColumn, TextColumn
16+
from sqlalchemy import inspect
17+
from sqlalchemy.ext.automap import automap_base
18+
from sqlalchemy.orm import Session
19+
20+
if TYPE_CHECKING:
21+
from collections.abc import Sequence
22+
23+
revision: str = '405c6936a164'
24+
down_revision: str | Sequence[str] | None = 'bbbdfd94e6fa'
25+
branch_labels: str | Sequence[str] | None = None
26+
depends_on: str | Sequence[str] | None = None
27+
28+
29+
def data_migrate() -> None:
30+
conn = op.get_bind()
31+
insp = inspect(conn)
32+
table_names = insp.get_table_names()
33+
if 'nonebot_plugin_tetris_stats_tetrioleaguehistorical' not in table_names:
34+
return
35+
36+
Base = automap_base() # noqa: N806
37+
Base.prepare(autoload_with=conn)
38+
Old = Base.classes.nonebot_plugin_tetris_stats_tetrioleaguehistorical # noqa: N806
39+
New = Base.classes.nb_t_io_tl_hist # noqa: N806
40+
41+
with Session(conn) as db_session:
42+
count = db_session.query(Old).count()
43+
if count == 0:
44+
return
45+
46+
logger.warning('tetris_stats: 正在迁移数据, 请不要关闭程序...')
47+
48+
with Progress(
49+
SpinnerColumn(),
50+
TextColumn('[progress.description]{task.description}'),
51+
BarColumn(),
52+
TaskProgressColumn(),
53+
) as progress:
54+
task = progress.add_task('迁移数据...', total=count)
55+
56+
for i in db_session.query(Old).yield_per(1):
57+
db_session.add(
58+
New(
59+
id=i.id,
60+
request_id=i.request_id,
61+
data=i.data,
62+
update_time=i.update_time,
63+
stats_id=i.stats_id,
64+
)
65+
)
66+
67+
progress.update(task, advance=1)
68+
69+
if progress.tasks[task].completed % 100 == 0:
70+
db_session.commit()
71+
72+
db_session.commit()
73+
74+
logger.success('tetris_stats: 数据迁移完成!')
75+
76+
77+
def upgrade(name: str = '') -> None:
78+
if name:
79+
return
80+
data_migrate()
81+
82+
83+
def downgrade(name: str = '') -> None:
84+
if name:
85+
return

nonebot_plugin_tetris_stats/config/migrations/5a1b93948494_add_tetrioleaguestats.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
def upgrade(name: str = '') -> None:
2626
if name:
2727
return
28+
if op.get_bind().dialect.name == 'postgresql':
29+
return
2830
# ### commands auto generated by Alembic - please adjust! ###
2931
op.create_table(
3032
'nonebot_plugin_tetris_stats_tetrioleaguestats',
@@ -102,6 +104,8 @@ def upgrade(name: str = '') -> None:
102104
def downgrade(name: str = '') -> None:
103105
if name:
104106
return
107+
if op.get_bind().dialect.name == 'postgresql':
108+
return
105109
# ### commands auto generated by Alembic - please adjust! ###
106110
with op.batch_alter_table('nonebot_plugin_tetris_stats_tetrioleaguestatsfield', schema=None) as batch_op:
107111
batch_op.drop_index(batch_op.f('ix_nonebot_plugin_tetris_stats_tetrioleaguestatsfield_rank'))

nonebot_plugin_tetris_stats/config/migrations/612d8b00d9ac_create_a_new_table.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
def upgrade(name: str = '') -> None:
2626
if name:
2727
return
28+
if op.get_bind().dialect.name == 'postgresql':
29+
return
2830
op.create_table(
2931
'nonebot_plugin_tetris_stats_triggerhistoricaldatav2',
3032
sa.Column('id', sa.Integer(), nullable=False),
@@ -53,6 +55,8 @@ def upgrade(name: str = '') -> None:
5355
def downgrade(name: str = '') -> None:
5456
if name:
5557
return
58+
if op.get_bind().dialect.name == 'postgresql':
59+
return
5660
with op.batch_alter_table('nonebot_plugin_tetris_stats_triggerhistoricaldatav2', schema=None) as batch_op:
5761
batch_op.drop_index(batch_op.f('ix_nonebot_plugin_tetris_stats_triggerhistoricaldatav2_game_platform'))
5862
batch_op.drop_index(batch_op.f('ix_nonebot_plugin_tetris_stats_triggerhistoricaldatav2_command_type'))

nonebot_plugin_tetris_stats/config/migrations/6c3206f90cc3_add_field.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
def upgrade(name: str = '') -> None:
2727
if name:
2828
return
29+
if op.get_bind().dialect.name == 'postgresql':
30+
return
2931
from json import dumps, loads
3032

3133
Base = automap_base() # noqa: N806
@@ -50,6 +52,8 @@ def upgrade(name: str = '') -> None:
5052
def downgrade(name: str = '') -> None:
5153
if name:
5254
return
55+
if op.get_bind().dialect.name == 'postgresql':
56+
return
5357
from json import dumps, loads
5458

5559
Base = automap_base() # noqa: N806

nonebot_plugin_tetris_stats/config/migrations/766cc7e75a62_migrate_to_uninfo.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,13 @@ def data_migrate() -> None:
105105
def upgrade(name: str = '') -> None:
106106
if name:
107107
return
108+
if op.get_bind().dialect.name == 'postgresql':
109+
return
108110
data_migrate()
109111

110112

111113
def downgrade(name: str = '') -> None:
112114
if name:
113115
return
116+
if op.get_bind().dialect.name == 'postgresql':
117+
return

0 commit comments

Comments
 (0)