You must be using MySQL InnoDB tables, at any rate that is the only way I could recreate the behavior using your project's scripts. With a MyISAM table script1.py saw the producer script2.py's updates immediately. So the problem is related to transactions.
script1.py is running in its own isolated transaction, which is never auto-committed by the underlying Django code since it never does any updates/inserts/deletes (see
http://www.djangoproject.com/documentation/transactions/).
script2.py does perform updates, which by default will be auto-committed immediately by Django. However script1.py's transaction does not see those updates because InnoDB's default transaction isolation level is "repeatable read". From
http://dev.mysql.com/books/mysqlpress/mysql-tutorial/ch10.html:
The default level for InnoDB is
repeatable read. In this
isolation mode, each transaction gets to work in an isolated version of
the table where each row remains as it was when the transaction
started. Reading a row is guaranteed to be repeatable.
If you want script1.py (using an InnoDB table) to see committed updates from other transactions you can change the transaction isolation level like so:
from django.db import connection
connection.cursor().execute('set transaction isolation level read committed')
Alternatively you can enable the database's version of auto-commit, which "commits" queries as well as updates, so that each new query by script1 will be in its own transaction:
connection.cursor().execute('set autocommit=1')
Either one allows script1 to see script2's updates.
Karen