Change id columns to TABLENAME_id

This commit is contained in:
Keith Edmunds 2025-04-22 20:18:56 +01:00
parent 6d012d7b5a
commit a4ba013306
4 changed files with 208 additions and 54 deletions

View File

@ -52,7 +52,7 @@ class JSONEncodedDict(TypeDecorator):
class NoteColours(Model): class NoteColours(Model):
__tablename__ = "notecolours" __tablename__ = "notecolours"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) notecolour_id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
substring: Mapped[str] = mapped_column(String(256), index=True, unique=True) substring: Mapped[str] = mapped_column(String(256), index=True, unique=True)
colour: Mapped[str] = mapped_column(String(21), index=False) colour: Mapped[str] = mapped_column(String(21), index=False)
enabled: Mapped[bool] = mapped_column(default=True, index=True) enabled: Mapped[bool] = mapped_column(default=True, index=True)
@ -64,7 +64,7 @@ class NoteColours(Model):
def __repr__(self) -> str: def __repr__(self) -> str:
return ( return (
f"<NoteColours(id={self.id}, substring={self.substring}, " f"<NoteColours(id={self.notecolour_id}, substring={self.substring}, "
f"colour={self.colour}>" f"colour={self.colour}>"
) )
@ -92,9 +92,9 @@ class NoteColours(Model):
class Playdates(Model): class Playdates(Model):
__tablename__ = "playdates" __tablename__ = "playdates"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) playdate_id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
lastplayed: Mapped[dt.datetime] = mapped_column(index=True) lastplayed: Mapped[dt.datetime] = mapped_column(index=True)
track_id: Mapped[int] = mapped_column(ForeignKey("tracks.id", ondelete="CASCADE")) track_id: Mapped[int] = mapped_column(ForeignKey("tracks.track_id", ondelete="CASCADE"))
track: Mapped["Tracks"] = relationship( track: Mapped["Tracks"] = relationship(
"Tracks", "Tracks",
back_populates="playdates", back_populates="playdates",
@ -116,7 +116,7 @@ class Playdates(Model):
def __repr__(self) -> str: def __repr__(self) -> str:
return ( return (
f"<Playdates(id={self.id}, track_id={self.track_id} " f"<Playdates(id={self.playdate_id}, track_id={self.track_id} "
f"lastplayed={self.lastplayed}>" f"lastplayed={self.lastplayed}>"
) )
@ -128,7 +128,7 @@ class Playlists(Model):
__tablename__ = "playlists" __tablename__ = "playlists"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) playlist_id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
name: Mapped[str] = mapped_column(String(32), unique=True) name: Mapped[str] = mapped_column(String(32), unique=True)
last_used: Mapped[Optional[dt.datetime]] = mapped_column(DateTime, default=None) last_used: Mapped[Optional[dt.datetime]] = mapped_column(DateTime, default=None)
tab: Mapped[Optional[int]] = mapped_column(default=None) tab: Mapped[Optional[int]] = mapped_column(default=None)
@ -146,7 +146,7 @@ class Playlists(Model):
def __repr__(self) -> str: def __repr__(self) -> str:
return ( return (
f"<Playlists(id={self.id}, name={self.name}, " f"<Playlists(id={self.playlist_id}, name={self.name}, "
f"is_templatee={self.is_template}, open={self.open}>" f"is_templatee={self.is_template}, open={self.open}>"
) )
@ -161,24 +161,24 @@ class Playlists(Model):
# If a template is specified, copy from it # If a template is specified, copy from it
if template_id: if template_id:
PlaylistRows.copy_playlist(session, template_id, self.id) PlaylistRows.copy_playlist(session, template_id, self.playlist_id)
class PlaylistRows(Model): class PlaylistRows(Model):
__tablename__ = "playlist_rows" __tablename__ = "playlist_rows"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) playlistrow_id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
row_number: Mapped[int] = mapped_column(index=True) row_number: Mapped[int] = mapped_column(index=True)
note: Mapped[str] = mapped_column( note: Mapped[str] = mapped_column(
String(2048), index=False, default="", nullable=False String(2048), index=False, default="", nullable=False
) )
playlist_id: Mapped[int] = mapped_column( playlist_id: Mapped[int] = mapped_column(
ForeignKey("playlists.id", ondelete="CASCADE"), index=True ForeignKey("playlists.playlist_id", ondelete="CASCADE"), index=True
) )
playlist: Mapped[Playlists] = relationship(back_populates="rows") playlist: Mapped[Playlists] = relationship(back_populates="rows")
track_id: Mapped[Optional[int]] = mapped_column( track_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("tracks.id", ondelete="CASCADE") ForeignKey("tracks.track_id", ondelete="CASCADE")
) )
track: Mapped["Tracks"] = relationship( track: Mapped["Tracks"] = relationship(
"Tracks", "Tracks",
@ -190,7 +190,7 @@ class PlaylistRows(Model):
def __repr__(self) -> str: def __repr__(self) -> str:
return ( return (
f"<PlaylistRows(id={self.id}, playlist_id={self.playlist_id}, " f"<PlaylistRows(id={self.playlistrow_id}, playlist_id={self.playlist_id}, "
f"track_id={self.track_id}, " f"track_id={self.track_id}, "
f"note={self.note}, row_number={self.row_number}>" f"note={self.note}, row_number={self.row_number}>"
) )
@ -217,7 +217,7 @@ class PlaylistRows(Model):
class Queries(Model): class Queries(Model):
__tablename__ = "queries" __tablename__ = "queries"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) query_id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
name: Mapped[str] = mapped_column(String(128), nullable=False) name: Mapped[str] = mapped_column(String(128), nullable=False)
_filter_data: Mapped[dict | None] = mapped_column("filter_data", JSONEncodedDict, nullable=False) _filter_data: Mapped[dict | None] = mapped_column("filter_data", JSONEncodedDict, nullable=False)
favourite: Mapped[bool] = mapped_column(Boolean, nullable=False, index=False, default=False) favourite: Mapped[bool] = mapped_column(Boolean, nullable=False, index=False, default=False)
@ -236,7 +236,7 @@ class Queries(Model):
filter = property(_get_filter, _set_filter) filter = property(_get_filter, _set_filter)
def __repr__(self) -> str: def __repr__(self) -> str:
return f"<Queries(id={self.id}, name={self.name}, filter={self.filter})>" return f"<Queries(id={self.query_id}, name={self.name}, filter={self.filter})>"
def __init__( def __init__(
self, self,
@ -260,7 +260,7 @@ class Settings(Model):
__tablename__ = "settings" __tablename__ = "settings"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) setting_id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
name: Mapped[str] = mapped_column(String(64), unique=True) name: Mapped[str] = mapped_column(String(64), unique=True)
f_datetime: Mapped[Optional[dt.datetime]] = mapped_column(default=None) f_datetime: Mapped[Optional[dt.datetime]] = mapped_column(default=None)
f_int: Mapped[Optional[int]] = mapped_column(default=None) f_int: Mapped[Optional[int]] = mapped_column(default=None)
@ -268,7 +268,7 @@ class Settings(Model):
def __repr__(self) -> str: def __repr__(self) -> str:
return ( return (
f"<Settings(id={self.id}, name={self.name}, " f"<Settings(id={self.setting_id}, name={self.name}, "
f"f_datetime={self.f_datetime}, f_int={self.f_int}, f_string={self.f_string}>" f"f_datetime={self.f_datetime}, f_int={self.f_int}, f_string={self.f_string}>"
) )
@ -282,7 +282,7 @@ class Settings(Model):
class Tracks(Model): class Tracks(Model):
__tablename__ = "tracks" __tablename__ = "tracks"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) track_id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
artist: Mapped[str] = mapped_column(String(256), index=True) artist: Mapped[str] = mapped_column(String(256), index=True)
bitrate: Mapped[int] = mapped_column(default=None) bitrate: Mapped[int] = mapped_column(default=None)
duration: Mapped[int] = mapped_column(index=True) duration: Mapped[int] = mapped_column(index=True)
@ -308,7 +308,7 @@ class Tracks(Model):
def __repr__(self) -> str: def __repr__(self) -> str:
return ( return (
f"<Track(id={self.id}, title={self.title}, " f"<Track(id={self.track_id}, title={self.title}, "
f"artist={self.artist}, path={self.path}>" f"artist={self.artist}, path={self.path}>"
) )

View File

@ -110,7 +110,7 @@ def _notecolours_all(session: Session) -> list[NoteColoursDTO]:
results: list[NoteColoursDTO] = [] results: list[NoteColoursDTO] = []
for record in records: for record in records:
result = NoteColoursDTO( result = NoteColoursDTO(
notecolour_id=record.id, notecolour_id=record.notecolour_id,
substring=record.substring, substring=record.substring,
colour=record.colour, colour=record.colour,
enabled=record.enabled, enabled=record.enabled,
@ -211,7 +211,7 @@ def _tracks_where(
) )
stmt = ( stmt = (
select( select(
Tracks.id.label("track_id"), Tracks.track_id,
Tracks.artist, Tracks.artist,
Tracks.bitrate, Tracks.bitrate,
Tracks.duration, Tracks.duration,
@ -223,7 +223,7 @@ def _tracks_where(
Tracks.title, Tracks.title,
latest_playdate_subq.c.lastplayed, latest_playdate_subq.c.lastplayed,
) )
.outerjoin(latest_playdate_subq, Tracks.id == latest_playdate_subq.c.track_id) .outerjoin(latest_playdate_subq, Tracks.track_id == latest_playdate_subq.c.track_id)
.where(query) .where(query)
) )
@ -259,7 +259,7 @@ def track_add_to_header(playlistrow_id: int, track_id: int) -> None:
with db.Session() as session: with db.Session() as session:
session.execute( session.execute(
update(PlaylistRows) update(PlaylistRows)
.where(PlaylistRows.id == playlistrow_id) .where(PlaylistRows.playlistrow_id == playlistrow_id)
.values(track_id=track_id) .values(track_id=track_id)
) )
session.commit() session.commit()
@ -268,7 +268,7 @@ def track_add_to_header(playlistrow_id: int, track_id: int) -> None:
def tracks_all() -> list[TrackDTO]: def tracks_all() -> list[TrackDTO]:
"""Return a list of all tracks""" """Return a list of all tracks"""
return _tracks_where(Tracks.id > 0) return _tracks_where(Tracks.track_id > 0)
def tracks_by_artist(filter_str: str) -> list[TrackDTO]: def tracks_by_artist(filter_str: str) -> list[TrackDTO]:
@ -284,7 +284,7 @@ def track_by_id(track_id: int) -> TrackDTO | None:
Return track with specified id Return track with specified id
""" """
track_list = _tracks_where(Tracks.id == track_id) track_list = _tracks_where(Tracks.track_id == track_id)
if not track_list: if not track_list:
return None return None
if len(track_list) > 1: if len(track_list) > 1:
@ -333,7 +333,7 @@ def track_create(metadata: dict[str, str | int | float]) -> TrackDTO:
bitrate=int(metadata["bitrate"]), bitrate=int(metadata["bitrate"]),
) )
track_id = track.id track_id = track.track_id
session.commit() session.commit()
except Exception: except Exception:
raise ApplicationError("Can't create Track") raise ApplicationError("Can't create Track")
@ -387,8 +387,8 @@ def tracks_filtered(filter: Filter) -> list[TrackDTO]:
# Process comparator # Process comparator
if filter.last_played_comparator == Config.FILTER_PLAYED_COMPARATOR_NEVER: if filter.last_played_comparator == Config.FILTER_PLAYED_COMPARATOR_NEVER:
# Select tracks that have never been played # Select tracks that have never been played
query = query.outerjoin(Playdates, Tracks.id == Playdates.track_id).where( query = query.outerjoin(Playdates, Tracks.track_id == Playdates.track_id).where(
Playdates.id.is_(None) Playdates.playdate_id.is_(None)
) )
else: else:
# Last played specification # Last played specification
@ -414,7 +414,7 @@ def tracks_filtered(filter: Filter) -> list[TrackDTO]:
.group_by(Playdates.track_id) .group_by(Playdates.track_id)
.subquery() .subquery()
) )
query = query.join(subquery, Tracks.id == subquery.c.track_id).where( query = query.join(subquery, Tracks.track_id == subquery.c.track_id).where(
subquery.c.max_last_played < before subquery.c.max_last_played < before
) )
@ -438,7 +438,7 @@ def tracks_filtered(filter: Filter) -> list[TrackDTO]:
silence_at=record.silence_at, silence_at=record.silence_at,
start_gap=record.start_gap, start_gap=record.start_gap,
title=record.title, title=record.title,
track_id=record.id, track_id=record.track_id,
) )
results.append(dto) results.append(dto)
@ -498,7 +498,7 @@ def _playlist_check_playlist(
msg = ( msg = (
"_check_playlist_integrity: incorrect row number " "_check_playlist_integrity: incorrect row number "
f"({plr.id=}, {plr.row_number=}, {idx=})" f"({plr.playlistrow_id=}, {plr.row_number=}, {idx=})"
) )
if fix: if fix:
log.debug(msg) log.debug(msg)
@ -542,7 +542,7 @@ def _playlists_where(
select( select(
Playlists.favourite, Playlists.favourite,
Playlists.is_template, Playlists.is_template,
Playlists.id.label("playlist_id"), Playlists.playlist_id,
Playlists.name, Playlists.name,
Playlists.open, Playlists.open,
) )
@ -570,7 +570,7 @@ def _playlists_where(
def playlists_all(): def playlists_all():
"""Return all playlists""" """Return all playlists"""
return _playlists_where(Playlists.id > 0) return _playlists_where(Playlists.playlist_id > 0)
# @log_call # @log_call
@ -579,7 +579,7 @@ def playlist_by_id(playlist_id: int) -> PlaylistDTO | None:
Return playlist with specified id Return playlist with specified id
""" """
playlist_list = _playlists_where(Playlists.id == playlist_id) playlist_list = _playlists_where(Playlists.playlist_id == playlist_id)
if not playlist_list: if not playlist_list:
return None return None
if len(playlist_list) > 1: if len(playlist_list) > 1:
@ -627,7 +627,7 @@ def playlist_create(
try: try:
playlist = Playlists(session, name, template_id) playlist = Playlists(session, name, template_id)
playlist.is_template = as_template playlist.is_template = as_template
playlist_id = playlist.id playlist_id = playlist.playlist_id
session.commit() session.commit()
except Exception: except Exception:
raise ApplicationError("Can't create Playlist") raise ApplicationError("Can't create Playlist")
@ -679,7 +679,7 @@ def playlist_insert_row(
track_id=track_id, track_id=track_id,
) )
session.commit() session.commit()
playlist_row_id = playlist_row.id playlist_row_id = playlist_row.playlistrow_id
# Sanity check # Sanity check
_playlist_check_playlist(session, playlist_id, fix=False) _playlist_check_playlist(session, playlist_id, fix=False)
@ -697,7 +697,7 @@ def playlist_mark_status(playlist_id: int, open: bool) -> None:
with db.Session() as session: with db.Session() as session:
session.execute( session.execute(
update(Playlists).where(Playlists.id == playlist_id).values(open=open) update(Playlists).where(Playlists.playlist_id == playlist_id).values(open=open)
) )
session.commit() session.commit()
@ -778,7 +778,7 @@ def _playlist_move_rows_between_playlists(
# Resequence row numbers in source # Resequence row numbers in source
_playlist_check_playlist(session, from_playlist_id, fix=True) _playlist_check_playlist(session, from_playlist_id, fix=True)
# Sanity check destionation # Sanity check destination
_playlist_check_playlist(session, from_playlist_id, fix=False) _playlist_check_playlist(session, from_playlist_id, fix=False)
@ -844,7 +844,7 @@ def _playlist_move_rows_within_playlist(
plrid = old_row_to_id[old_row] plrid = old_row_to_id[old_row]
update_list.append({"id": plrid, "row_number": new_row}) update_list.append({"id": plrid, "row_number": new_row})
# Updte database # Update database
session.execute(update(PlaylistRows), update_list) session.execute(update(PlaylistRows), update_list)
session.commit() session.commit()
@ -867,7 +867,7 @@ def playlist_rename(playlist_id: int, new_name: str) -> None:
with db.Session() as session: with db.Session() as session:
session.execute( session.execute(
update(Playlists).where(Playlists.id == playlist_id).values(name=new_name) update(Playlists).where(Playlists.playlist_id == playlist_id).values(name=new_name)
) )
session.commit() session.commit()
@ -989,12 +989,12 @@ def playlist_save_tabs(playlist_id_to_tab: dict[int, int]) -> None:
# Clear all existing tab numbers # Clear all existing tab numbers
session.execute( session.execute(
update(Playlists) update(Playlists)
.where(Playlists.id.in_(playlist_id_to_tab.keys())) .where(Playlists.playlist_id.in_(playlist_id_to_tab.keys()))
.values(tab=None) .values(tab=None)
) )
for playlist_id, tab in playlist_id_to_tab.items(): for playlist_id, tab in playlist_id_to_tab.items():
session.execute( session.execute(
update(Playlists).where(Playlists.id == playlist_id).values(tab=tab) update(Playlists).where(Playlists.playlist_id == playlist_id).values(tab=tab)
) )
session.commit() session.commit()
@ -1006,7 +1006,7 @@ def playlist_update_template_favourite(template_id: int, favourite: bool) -> Non
with db.Session() as session: with db.Session() as session:
session.execute( session.execute(
update(Playlists) update(Playlists)
.where(Playlists.id == template_id) .where(Playlists.playlist_id == template_id)
.values(favourite=favourite) .values(favourite=favourite)
) )
session.commit() session.commit()
@ -1024,7 +1024,7 @@ def playlistrow_by_id(playlistrow_id: int) -> PlaylistRowDTO | None:
with db.Session() as session: with db.Session() as session:
record = ( record = (
session.execute( session.execute(
select(PlaylistRows).where(PlaylistRows.id == playlistrow_id) select(PlaylistRows).where(PlaylistRows.playlistrow_id == playlistrow_id)
) )
.scalars() .scalars()
.one_or_none() .one_or_none()
@ -1040,7 +1040,7 @@ def playlistrow_by_id(playlistrow_id: int) -> PlaylistRowDTO | None:
note=record.note, note=record.note,
played=record.played, played=record.played,
playlist_id=record.playlist_id, playlist_id=record.playlist_id,
playlistrow_id=record.id, playlistrow_id=record.playlistrow_id,
row_number=record.row_number, row_number=record.row_number,
track=track, track=track,
) )
@ -1074,7 +1074,7 @@ def playlistrows_by_playlist(
note=record.note, note=record.note,
played=record.played, played=record.played,
playlist_id=record.playlist_id, playlist_id=record.playlist_id,
playlistrow_id=record.id, playlistrow_id=record.playlistrow_id,
row_number=record.row_number, row_number=record.row_number,
track=track, track=track,
) )
@ -1112,7 +1112,7 @@ def playlistrow_played(playlistrow_id: int, status: bool) -> None:
with db.Session() as session: with db.Session() as session:
session.execute( session.execute(
update(PlaylistRows) update(PlaylistRows)
.where(PlaylistRows.id == playlistrow_id) .where(PlaylistRows.playlistrow_id == playlistrow_id)
.values(played=status) .values(played=status)
) )
session.commit() session.commit()
@ -1165,7 +1165,7 @@ def playdates_between_dates(
end = dt.datetime.now() end = dt.datetime.now()
stmt = select( stmt = select(
Playdates.id.label("playdate_id"), Playdates.playdate_id,
Playdates.lastplayed, Playdates.lastplayed,
Playdates.track_id, Playdates.track_id,
Playdates.track, Playdates.track,
@ -1213,7 +1213,7 @@ def _queries_where(
favourite=record.favourite, favourite=record.favourite,
filter=record.filter, filter=record.filter,
name=record.name, name=record.name,
query_id=record.id, query_id=record.query_id,
) )
results.append(dto) results.append(dto)
@ -1223,14 +1223,14 @@ def _queries_where(
def queries_all(favourites_only: bool = False) -> list[QueryDTO]: def queries_all(favourites_only: bool = False) -> list[QueryDTO]:
"""Return a list of all queries""" """Return a list of all queries"""
query = Queries.id > 0 query = Queries.query_id > 0
return _queries_where(query) return _queries_where(query)
def query_by_id(query_id: int) -> QueryDTO | None: def query_by_id(query_id: int) -> QueryDTO | None:
"""Return query""" """Return query"""
query_list = _queries_where(Queries.id == query_id) query_list = _queries_where(Queries.query_id == query_id)
if not query_list: if not query_list:
return None return None
if len(query_list) > 1: if len(query_list) > 1:
@ -1246,7 +1246,7 @@ def query_create(name: str, filter: Filter) -> QueryDTO:
with db.Session() as session: with db.Session() as session:
try: try:
query = Queries(session=session, name=name, filter=filter) query = Queries(session=session, name=name, filter=filter)
query_id = query.id query_id = query.query_id
session.commit() session.commit()
except Exception: except Exception:
raise ApplicationError("Can't create Query") raise ApplicationError("Can't create Query")
@ -1272,7 +1272,7 @@ def query_update_favourite(query_id: int, favourite: bool) -> None:
with db.Session() as session: with db.Session() as session:
session.execute( session.execute(
update(Queries).where(Queries.id == query_id).values(favourite=favourite) update(Queries).where(Queries.query_id == query_id).values(favourite=favourite)
) )
session.commit() session.commit()
@ -1282,7 +1282,7 @@ def query_update_filter(query_id: int, filter: Filter) -> None:
with db.Session() as session: with db.Session() as session:
session.execute( session.execute(
update(Queries).where(Queries.id == query_id).values(filter=filter) update(Queries).where(Queries.query_id == query_id).values(filter=filter)
) )
session.commit() session.commit()
@ -1291,7 +1291,7 @@ def query_update_name(query_id: int, name: str) -> None:
"""Update query name""" """Update query name"""
with db.Session() as session: with db.Session() as session:
session.execute(update(Queries).where(Queries.id == query_id).values(name=name)) session.execute(update(Queries).where(Queries.query_id == query_id).values(name=name))
session.commit() session.commit()

View File

@ -0,0 +1,68 @@
"""notes substrings, indexing, playlist faviourites, bitrate not null
Revision ID: 6d36cde8dea0
Revises: 4fc2a9a82ab0
Create Date: 2025-04-22 17:03:00.497945
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import mysql
# revision identifiers, used by Alembic.
revision = '6d36cde8dea0'
down_revision = '4fc2a9a82ab0'
branch_labels = None
depends_on = None
def upgrade(engine_name: str) -> None:
globals()["upgrade_%s" % engine_name]()
def downgrade(engine_name: str) -> None:
globals()["downgrade_%s" % engine_name]()
def upgrade_() -> None:
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('notecolours', schema=None) as batch_op:
batch_op.add_column(sa.Column('strip_substring', sa.Boolean(), nullable=False))
batch_op.create_index(batch_op.f('ix_notecolours_substring'), ['substring'], unique=True)
with op.batch_alter_table('playlist_rows', schema=None) as batch_op:
batch_op.create_index(batch_op.f('ix_playlist_rows_playlist_id'), ['playlist_id'], unique=False)
with op.batch_alter_table('playlists', schema=None) as batch_op:
batch_op.add_column(sa.Column('favourite', sa.Boolean(), nullable=False))
with op.batch_alter_table('tracks', schema=None) as batch_op:
batch_op.alter_column('bitrate',
existing_type=mysql.INTEGER(display_width=11),
nullable=False)
# ### end Alembic commands ###
def downgrade_() -> None:
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('tracks', schema=None) as batch_op:
batch_op.alter_column('bitrate',
existing_type=mysql.INTEGER(display_width=11),
nullable=True)
with op.batch_alter_table('playlists', schema=None) as batch_op:
batch_op.drop_column('favourite')
with op.batch_alter_table('playlist_rows', schema=None) as batch_op:
batch_op.drop_index(batch_op.f('ix_playlist_rows_playlist_id'))
with op.batch_alter_table('notecolours', schema=None) as batch_op:
batch_op.drop_index(batch_op.f('ix_notecolours_substring'))
batch_op.drop_column('strip_substring')
# ### end Alembic commands ###

View File

@ -0,0 +1,86 @@
"""Have id field reflect table name
Revision ID: 8e06d465923a
Revises: 6d36cde8dea0
Create Date: 2025-04-22 13:23:18.813024
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import mysql
from dataclasses import dataclass
@dataclass
class TableInfo:
table: str
old: str
new: str
data = [
TableInfo("notecolours", "id", "notecolour_id"),
TableInfo("playdates", "id", "playdate_id"),
TableInfo("playlists", "id", "playlist_id"),
TableInfo("playlist_rows", "id", "playlistrow_id"),
TableInfo("queries", "id", "query_id"),
TableInfo("settings", "id", "setting_id"),
TableInfo("tracks", "id", "track_id"),
]
# revision identifiers, used by Alembic.
revision = '8e06d465923a'
down_revision = '6d36cde8dea0'
branch_labels = None
depends_on = None
def upgrade(engine_name: str) -> None:
globals()["upgrade_%s" % engine_name]()
def downgrade(engine_name: str) -> None:
globals()["downgrade_%s" % engine_name]()
def upgrade_() -> None:
# Drop foreign key constraints
op.drop_constraint('fk_playdates_track_id_tracks', 'playdates', type_='foreignkey')
op.drop_constraint('fk_playlist_rows_track_id_tracks', 'playlist_rows', type_='foreignkey')
for record in data:
op.alter_column(
record.table,
record.old,
new_column_name=record.new,
existing_type=sa.Integer(), # Specify the existing column type
existing_nullable=False # If the column is NOT NULL, specify that too
)
# Recreate the foreign key constraints
op.create_foreign_key('fk_playdates_track_id_tracks', 'playdates', 'tracks', ['track_id'], ['track_id'])
op.create_foreign_key('fk_playlist_rows_track_id_tracks', 'playlist_rows', 'tracks', ['track_id'], ['track_id'])
# ### end Alembic commands ###
def downgrade_() -> None:
# Drop foreign key constraints
op.drop_constraint('fk_playdates_track_id_tracks', 'playdates', type_='foreignkey')
op.drop_constraint('fk_playlist_rows_track_id_tracks', 'playlist_rows', type_='foreignkey')
for record in data:
op.alter_column(
record.table,
record.new,
new_column_name=record.old,
existing_type=sa.Integer(), # Specify the existing column type
existing_nullable=False # If the column is NOT NULL, specify that too
)
# Recreate the foreign key constraints
op.create_foreign_key('fk_playdates_track_id_tracks', 'playdates', 'tracks', ['track_id'], ['track_id'])
op.create_foreign_key('fk_playlist_rows_track_id_tracks', 'playlist_rows', 'tracks', ['track_id'], ['track_id'])
# ### end Alembic commands ###