python - python MySQLdb迭代查询表
问题描述
我正在尝试使用 Python 和 MySQLdb 查询一个表。这是我到目前为止所得到的:
db = MySQLdb.connect( host = 'localhost', user = 'user', passwd=
'password', db = 'vacants')
cursor = db.cursor()
numrows = cursor.rowcount
query = "SELECT address, ((20903520) * acos (cos ( radians(38.67054) )* cos(
radians( lat ) ) * cos( radians( `long` ) - radians(-90.22942) ) + sin (
radians(38.67054) ) * sin( radians( lat ) ))) AS distance FROM vacants HAVING
distance < 100;"
cursor.execute(query)
我有一张桌子,cfs,还有一张,空置。我想查看 cfs 中的每一行是否有 100 英尺内的空置房产。所以对于(弧度(38.67054)和弧度(-90.22942),我需要循环遍历cfs表,以便每个cfs纬度和经度替换这两个数字。(这只是我们使用的测试纬度和经度)
最后,我想要(在 .csv 中)空置物业地址、与服务调用的距离以及调用类型(它们是调用服务数据库中的两个独立字段)。像这样的东西,来自上面的查询:
这是示例数据 - 调用服务坐标:
38.595767638008056,-90.2316138251402
38.57283495467307,-90.24649031378685
38.67497061776659,-90.28415976525395
38.67650431524285,-90.25623757427952
38.591971519414784,-90.27782710145746
38.61272746420862,-90.23292862245287
38.67312983860098,-90.23591869583113
38.625956494342674,-90.18853950906939
38.69044465638584,-90.24339061920696
38.67745024638241,-90.20657832034047
和空缺:
38.67054,-90.22942
38.642956,-90.21466
38.671535,-90.27293
38.666367,-90.23749
38.65339,-90.23141
38.645996,-90.20334
38.60214,-90.224815
38.67265,-90.214134
38.665504,-90.274414
38.668354,-90.269966
解决方案
这不是最终的解决方案,因为问题中没有足够的信息(地址字段?和 20903520 ?),但它可能会通过展示如何遍历两个表并将 CFS 表中的 lat、lon 替换到查询中来帮助您走上正轨应用于空缺表:
import mysql.connector
cnx1 = mysql.connector.connect(user='root',password='xxxx',host='127.0.0.1',database=db)
cursor1 = cnx1.cursor()
cnx2 = mysql.connector.connect(user='root',password='xxxx',host='127.0.0.1',database=db)
cursor2 = cnx2.cursor()
sql_cfs = ('select lat,lon from cfs')
cursor1.execute(sql_cfs)
for cfs in cursor1:
[cfs_lat,cfs_lon] = cfs
print (cfs_lat,cfs_lon)
query = ("SELECT address, ((20903520) * " \
"acos (cos(radians(lon)) *" \
"cos(radians({})) * " \
"cos(radians({})-radians(lat)) + sin(radians(lon)) * " \
"sin( radians({})))) AS distance " \
"FROM vacants HAVING distance < 100;".format(cfs_lat,cfs_lon,cfs_lat))
print (query)
cursor2.execute(query)
for vacants in cursor2:
print (vacants)
推荐阅读
- excel - 使用 VBA 从 Aria Control Dropdown 中选择一个值
- angular - 为什么正则表达式的行为与 Angular 表单验证器中的字符串不同
- javascript - jQuery控制动态元素创建
- python - 使用 dlib、OpenCV 和 Python 进行面部标记
- react-native - ReactNative:如何使用 react-native-navigation 库将参数从列表屏幕传递到详细屏幕?
- java - 为什么我不能在 Java 代码中使用“return”?
- javascript - 使用正则表达式搜索双括号文本或双括号
- php - Wordpress 5.0 REST API 帖子/{ID} 返回 404 状态
- c++ - Warning against C++ implicit conversion
- php - PHP:如果给定的字符串包含括号,则 preg_replace 不返回任何内容