Biopython BioSQL error : AttributeError: 'DBSeq' object has no attribute '_data' Hi I am playing with Biopython and BioSQL,
I manage to create an MySQL database using Managing local biological databases with the BioSQL module tutorial:
and load 2909 fasta sequences in it through:
db = server[&quot;test_1&quot;]

count = db.load(SeqIO.parse(&quot;Newtextfile-03.txt&quot;, &quot;fasta&quot;))
        print(&quot;Loaded %i records&quot; % count)
        server.commit()

from this file: Newtextfile-03.txt
problem is trying just to print the database index list with:
for i in db:
    print(i)

works , while trying print element by element:
for i in db:
    print(i, db[i])

or with:
for key, record in db.items():
            print (&quot;Key %r maps to a sequence record  %s&quot; % (key, record))

gives an error:
2557 Traceback (most recent call last):
  File &quot;./try_001.py&quot;, line 142, in &lt;module&gt;
    f()
  File &quot;./try_001.py&quot;, line 120, in f
    print(i, db[i])
  File &quot;......../lib/python3.8/site-packages/Bio/SeqRecord.py&quot;, line 652, in __str__
    lines.append(repr(self.seq))
  File &quot;........//lib/python3.8/site-packages/Bio/Seq.py&quot;, line 109, in __repr__
    return f&quot;{self.__class__.__name__}({self._data!r})&quot;

AttributeError: 'DBSeq' object has no attribute '_data'


the error occurs for three records namely : [2164, 2522, 2557]
inspecting the Newtextfile-03.txt file results in finding fasta sequences of less than
100 aminoacids.
Is there any way to resolve the error ? It sounds strange to me that I can load the records into the database but not retrieving them. Is anything I am missing about the record load ? or similar ?
I am working with the database using:
 server = BioSeqDatabase.open_database(
    driver='MySQLdb' , 
    user=password.userz,
    password=password.pazzword,
    host=&quot;XXXXXXXX&quot;,
    db=&quot;bio-data-first&quot;)

db = server.new_database(&quot;test_1&quot;, description=&quot;Just for testing&quot;)
        server.commit()

using  driver=&quot;MySQLdb&quot;, wasn't able to have driver='mysql.connector' to work,
biopython is version 1.78
It's a bug in Biopython 1.78.
What those three sequences have in common is that they're less than 61 characters long.  When you print the record it implicitly calls __str__ for the record, which calls __repr__ for the Seq.  DBSeq gets its method from Seq, which looks like:
    def __repr__(self):
        &quot;&quot;&quot;Return (truncated) representation of the sequence for debugging.&quot;&quot;&quot;
        if len(self) &gt; 60:
            # Shows the last three letters as it is often useful to see if
            # there is a stop codon at the end of a sequence.
            # Note total length is 54+3+3=60
            return f&quot;{self.__class__.__name__}('{str(self[:54])}...{str(self[-3:])}')&quot;
        else:
            return f&quot;{self.__class__.__name__}({self._data!r})&quot;

...and then it only tries to access the nonexistent _data for the short sequences.
So there's a mismatch between DBSeq's lack of a _data attribute and its use of Seq.__repr__.  I don't see a DBSeq class at all in the latest Biopython, so maybe this is fixed already.  But there's no tag for 1.79 yet that I can see and I can't get the very latest code to import successfully so I'm not sure.  In the meantime if you avoid letting repr(record) happen you should be able to work around it.