48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
|
# 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")
|
||
|
|