inf04-web2/entrypoint.py

48 lines
1.3 KiB
Python
Raw Normal View History

2024-06-20 19:10:59 +00:00
# entrypoint.py
from Bio import SeqIO
from sqlalchemy.orm import Session
from app.database import engine, SessionLocal, Base
from app.models import Sequence, Feature
import json
# Tworzenie tabeli w bazie danych
Base.metadata.create_all(bind=engine)
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
def load_genbank_to_db(file_path: str):
db = next(get_db())
with open(file_path, 'r') as file:
record = SeqIO.read(file, "genbank")
# Zapisz sekwencję do bazy danych
sequence_data = Sequence(
name=record.name,
description=record.description,
sequence=str(record.seq)
)
db.add(sequence_data)
db.commit()
# Zapisz cechy (features) do bazy danych
for feature in record.features:
feature_data = Feature(
type=feature.type,
location=str(feature.location),
sequence=str(record.seq[feature.location.start:feature.location.end]),
qualifiers=json.dumps(feature.qualifiers),
sequence_id=sequence_data.id
)
db.add(feature_data)
db.commit()
print(f"Loaded {file_path} to database.")
if __name__ == "__main__":
load_genbank_to_db("data/pET-28+(a).gb")