Python

SQLAlchemy: Difference between Flush and Commit

In simple terms:

  • Similarity: after both flush and commit, later queries will be able to retrieve these changes.
  • Difference: flush() changes are in a pending state (no db statements are issued yet), and can be undone by rollback(); commits are persisted to db and non-reversible.

Why use flush:

  • To have atomicity–making sure that a group of transactions either all succeed or all fail.

Standard
Python

Python Function Fun Facts

A string identifier is attached to every function at creation time

  • Which is nice for debug:
>>> dance.__name__
'dance'

Functions capture local state

  • Just like JavaScript, (lexical) closure:
  • A closure remembers the values from its enclosing scope when it was created

To check whether something is callable

  • Objects can be made callable, by being assigned function as value
  • So, to check whether an object is callable:
>>> callable(foo)
True/False

Benefit of functions being first class

  • We are able to abstract and pass around behaviours
Standard
Python

Why Use Assertion

And, what is the difference between raising normal errors and assertions? Basically:

Raising ErrorAssertion
Raise ValueError('Input not in range [1, 10]')assert 1 <= v <= 10
Intended for usersIntended for developers
Happens when user action is illegalHappens when code contains bug
To signal to user to take a different course of actionTo easily find where code starts to error
Cannot and should not be disabledCan be disabled during compilation,
therefore should not be used in logics like data validation

Standard
Python, VSCode

Python + VSCode: “Go to Definition” Doesn’t Work?

Make sure that you have Microsoft’s Python extension installed. If you need more than one paths, simply create a .env file in project root path, and add extra paths in, separated by :, as such:

PYTHONPATH=libs/python:/another/python

VSCode will know to look for definitions under these paths.

If it still doesn’t work, or doesn’t work all the time, it’s very likely that one of the other plugins that you have is interfering with the Python one. To check, use Command + Shift + P to open the prompt and run the command:

> Extensions: Open Extensions Folder

Move all the extensions there to another temporary place, re-install the Python extension, and see if things start working now. If it does work now, add them back in batch to find out the culprit. 😀

Also, for gigantic projects, try switching intellisense engine:

Try switching off Jedi

Standard