[英]How to avoid SQL injection with “SELECT * FROM {table_name}”?
[英]What is the type of table_name in select_from(table_name)?
我試圖通過遍歷SQL Server以查看其中包含多少數據來從包含許多表的SQL Server中獲取行數。 但是,我不確定select_from()函數中將使用什么內容。 正如我目前為表名提供Unicode一樣,它提出了
NoInspectionAvailable: No inspection system is available for object of type <type 'unicode'>
我使用的代碼是
from sqlalchemy import create_engine
import urllib
from sqlalchemy import inspect
import sqlalchemy
from sqlalchemy import select, func, Integer, Table, Column, MetaData
from sqlalchemy.orm import sessionmaker
connection_string = "DRIVER={SQL Server}; *hidden*"
connection_string = urllib.quote_plus(connection_string)
connection_string = "mssql+pyodbc:///?odbc_connect=%s" % connection_string
engine = sqlalchemy.create_engine(connection_string)
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
connection = engine.connect()
inspector = inspect(engine)
for table_name in inspector.get_table_names():
print session.query(func.count('*')).select_from(table_name).scalar()
通常,它是一個類名稱,它引用描述數據庫表的類。
在sqlalchemy文檔http://docs.sqlalchemy.org/en/latest/orm/tutorial.html中 ,他們讓您使用聲明性基類創建基類,然后為要查詢的每個表創建子類。 然后,您可以將該類名不加引用地傳遞給select_from函數。
Flask框架提供了一個內置的基類,可以立即使用,名為db.Model,而Django有一個名為models.Model的基類。
或者,您也可以傳遞查詢。 我通常將Flask框架用於python,因此通常會這樣發起查詢:
my_qry = db.session.query(Cust).filter(Cust, Cust.cust == 'lolz')
results = my_qry.all()
附帶一提,如果您決定查看.NET,則它們也有不錯的ORM。 就個人而言,我更喜歡實體框架,但是Linq to SQL也在那里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.