Sql Python: 打开数据库前如何排序?
Sql Python: How to sort database before opening?
import sys
from twisted.enterprise import adbapi
from scrapy.utils.project import get_project_settings
import hashlib
from scrapy import log
import MySQLdb
from scrapy.exceptions import DropItem
from scrapy.http import Request
settings = get_project_settings()
class ZillowSamplePipeline(object):
def __init__(self):
dbargs = settings.get('DB_CONNECT')
db_server = settings.get('DB_SERVER')
dbpool = adbapi.ConnectionPool(db_server, **dbargs)
self.dbpool = dbpool
def __del__(self):
self.dbpool.close()
def process_item(self, item, spider):
query = self.dbpool.runInteraction(self._conditional_insert, item)
query.addErrback(self.handle_error)
return item
def _conditional_insert(self, tx, item):
#doesnt allow duplicates.
tx.execute("select * from test where date = %s and title =%s", (item['date'], item['title'] ))
result = tx.fetchone()
if result:
log.msg("Item already stored in db: %s" % item, level=log.DEBUG)
else:
#insert data
tx.execute(\
"insert into test (title, number, date) "
"values (%s, %s, %s)",
(item['title'],
item['number'],
item['date']))
log.msg("Item stored in db: %s" % item, level=log.DEBUG)
#re-organize data
tx.execute("SELECT * FROM test ORDER BY title")
def handle_error(self, e):
log.err(e)
这是我的 scrapy 项目用于抓取数据并上传到 mysql 数据库的管道。我能够抓取所有数据并将其上传到数据库。我唯一的问题/问题是在我执行此代码后,我能够获取数据库中的所有内容,但我无法看到数据库已整理出来。我正在通过这条线 tx.execute("SELECT * FROM test ORDER BY title") 进行操作。所以我想按标题订购 table,这样我就可以在彼此下方看到相同的标题,并以日期分隔。而不是为同一日期抓取不同数量的数据。当我在 MYSQL 中执行上面的查询时,它显示了我想要显示的数据但是当我执行代码并打开我的 SQL 时,我没有看到数据库已经根据标题整理出来.我希望数据库按标题排序,所以无论我 运行 代码多少次,它仍然会根据标题对所有信息进行排序。
在您的代码中,Select 语句将为您获取按标题排序的数据,这按预期工作。它实际上并没有重新排序数据库的内部结构。因此,每当您需要获取按标题排序的数据时,您必须在 yoru 查询中使用 ORDER BY title。无法通过将函数应用于数据库来保证行返回的顺序,并且所有未来的查询都将按该顺序返回。
import sys
from twisted.enterprise import adbapi
from scrapy.utils.project import get_project_settings
import hashlib
from scrapy import log
import MySQLdb
from scrapy.exceptions import DropItem
from scrapy.http import Request
settings = get_project_settings()
class ZillowSamplePipeline(object):
def __init__(self):
dbargs = settings.get('DB_CONNECT')
db_server = settings.get('DB_SERVER')
dbpool = adbapi.ConnectionPool(db_server, **dbargs)
self.dbpool = dbpool
def __del__(self):
self.dbpool.close()
def process_item(self, item, spider):
query = self.dbpool.runInteraction(self._conditional_insert, item)
query.addErrback(self.handle_error)
return item
def _conditional_insert(self, tx, item):
#doesnt allow duplicates.
tx.execute("select * from test where date = %s and title =%s", (item['date'], item['title'] ))
result = tx.fetchone()
if result:
log.msg("Item already stored in db: %s" % item, level=log.DEBUG)
else:
#insert data
tx.execute(\
"insert into test (title, number, date) "
"values (%s, %s, %s)",
(item['title'],
item['number'],
item['date']))
log.msg("Item stored in db: %s" % item, level=log.DEBUG)
#re-organize data
tx.execute("SELECT * FROM test ORDER BY title")
def handle_error(self, e):
log.err(e)
这是我的 scrapy 项目用于抓取数据并上传到 mysql 数据库的管道。我能够抓取所有数据并将其上传到数据库。我唯一的问题/问题是在我执行此代码后,我能够获取数据库中的所有内容,但我无法看到数据库已整理出来。我正在通过这条线 tx.execute("SELECT * FROM test ORDER BY title") 进行操作。所以我想按标题订购 table,这样我就可以在彼此下方看到相同的标题,并以日期分隔。而不是为同一日期抓取不同数量的数据。当我在 MYSQL 中执行上面的查询时,它显示了我想要显示的数据但是当我执行代码并打开我的 SQL 时,我没有看到数据库已经根据标题整理出来.我希望数据库按标题排序,所以无论我 运行 代码多少次,它仍然会根据标题对所有信息进行排序。
在您的代码中,Select 语句将为您获取按标题排序的数据,这按预期工作。它实际上并没有重新排序数据库的内部结构。因此,每当您需要获取按标题排序的数据时,您必须在 yoru 查询中使用 ORDER BY title。无法通过将函数应用于数据库来保证行返回的顺序,并且所有未来的查询都将按该顺序返回。