Tôi có một lớp ORM được gọi là Person, lớp này bao quanh một bảng người:
Sau khi thiết lập kết nối với db, v.v., tôi chạy câu lệnh:
people = session.query(Person).all()
Bảng người không chứa bất kỳ dữ liệu nào (như chưa có), vì vậy khi tôi in biến people
, tôi nhận được một danh sách trống.
Tôi đã đổi tên bảng được tham chiếu trong lớp ORM của mình People
thành people_foo
(không tồn tại).
Sau đó tôi chạy lại script. Tôi rất ngạc nhiên rằng không có ngoại lệ nào được ném ra khi cố gắng truy cập vào một bảng không tồn tại.
Do đó, tôi có 2 câu hỏi sau:
- Làm cách nào để thiết lập SQLAlchemy để nó truyền lỗi db trở lại tập lệnh?
- Làm cách nào tôi có thể xem (tức là in) SQL đang được gửi đến công cụ db?
Nếu nó hữu ích, tôi đang sử dụng PostgreSQL.
[Biên tập]
Tôi đang viết một gói. Trong __main__.py
tập lệnh của tôi , tôi có mã sau (được rút gọn ở đây):
### __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)
[Chỉnh sửa2]
Mô-đun chung thiết lập trình ghi một cách chính xác và tôi có thể sử dụng trình ghi trong các mô-đun nhập chung khác của tôi.
Tuy nhiên, trong dbfuncs
mô-đun, tôi nhận được lỗi / cảnh báo sau:
Không tìm thấy trình xử lý nào cho trình ghi nhật ký "sqlalchemy.engine.base.Engine
common.setup_logger()
cuộc gọi nào (giả sử nó định cấu hình ghi nhật ký đúng cách) ở đây. Ngoài ra, bạn không cầnecho=True
khi sử dụng ghi nhật ký.