Saya memiliki kelas ORM yang disebut Person, yang mengelilingi tabel person:
Setelah mengatur koneksi ke db dll, saya menjalankan pernyataan:
people = session.query(Person).all()
Tabel person tidak berisi data apa pun (hingga saat ini), jadi ketika saya mencetak variabel people, saya mendapatkan daftar kosong.
Saya mengganti nama tabel yang dirujuk di kelas ORM saya People, menjadi people_foo(yang tidak ada).
Saya kemudian menjalankan skrip lagi. Saya terkejut bahwa tidak ada pengecualian yang dilemparkan saat mencoba mengakses tabel yang tidak ada.
Karena itu, saya memiliki 2 pertanyaan berikut:
- Bagaimana cara saya mengatur SQLAlchemy sehingga kesalahan db kembali ke skrip?
- Bagaimana saya dapat melihat (yaitu mencetak) SQL yang sedang dikirim ke mesin db?
Jika membantu, saya menggunakan PostgreSQL.
[Sunting]
Saya sedang menulis paket. Dalam __main__.pyskrip saya , saya memiliki kode berikut (disingkat di sini):
### __main__.py
import common # imports logging and defines logging setup funcs etc
logger = logging.getLogger(__name__)
def main():
parser = OptionParser(usage="%prog [options] <commands>",
version="%prog 1.0")
commands = OptionGroup(parser, "commands")
parser.add_option(
"-l",
"--logfile",
dest="logfile",
metavar="FILE",
help="log to FILE. if not set, no logging will be done"
)
parser.add_option(
"--level",
dest="loglevel",
metavar="LOG LEVEL",
help="Debug level. if not set, level will default to low"
)
# Set defaults if not specified
if not options.loglevel:
loglevel = 1
else:
loglevel = options.loglevel
if not options.logfile:
logfilename = 'datafeed.log'
else:
logfilename = options.logfile
common.setup_logger(False, logfilename, loglevel)
# and so on ...
#### dbfuncs.py
import logging
# not sure how to 'bind' to the logger in __main__.py
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
engine = create_engine('postgres://postgres:pwd@localhost:port/dbname', echo=True)
[Sunting2]
Modul umum mengatur logger dengan benar, dan saya dapat menggunakan logger di modul saya yang lain yang mengimpor umum.
Namun dalam dbfuncsmodul, saya mendapatkan kesalahan / peringatan berikut:
Tidak ada penangan yang dapat ditemukan untuk logger "sqlalchemy.engine.base.Engine
common.setup_logger()panggilan (dengan asumsi itu mengkonfigurasi logging dengan benar) di sini. Selain itu, Anda tidak perluecho=Truemenggunakan logging.