【问题标题】:how to send data to to mssql server from python raspberry pi?如何从 python raspberry pi 将数据发送到 mssql 服务器?
【发布时间】:2016-12-01 03:55:48
【问题描述】:

我已经用程序制作了一个按钮/开关电路,该程序将使用 wxPython 将其显示输出,但我想将数据发送到服务器。

这是按钮程序:

import RPi.GPIO as GPIO
import datetime
import os

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(40, GPIO.IN)

global count, flag
count = 0
flag = 0
button = "None"
input = GPIO.input(40)

global update_time
update_time = datetime.datetime.strftime(datetime.datetime.now(), '%d-%m-%y     %H:%M:%S')

try:
    import wx
except ImportError:
    raise ImportError, "The wxPython module is required to run this program."

class OnOffApp_wx(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, size = (500, 200), title = 'ON / OFF Status')
        self.SetBackgroundColour(wx.WHITE)
        self.SetWindowStyle(wx.STAY_ON_TOP)
        self.parent = parent
        self.initialize()

    def initialize(self):
        sizer = wx.GridBagSizer()
        font = wx.Font(20, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)
        self.SetFont(font)

        self.label1 = wx.StaticText(self, -1, label=u'Button Status : {}'.format(button))
        self.label1.SetBackgroundColour(wx.WHITE)
        self.label1.SetForegroundColour(wx.BLACK)
        sizer.Add(self.label1, (1,0), (1,2), wx.EXPAND)

        self.label2 = wx.StaticText(self, -1, label=u'Flag Status : {}'.format(flag))
        self.label2.SetBackgroundColour(wx.WHITE)
        self.label2.SetForegroundColour(wx.BLACK)
        sizer.Add(self.label2, (2,0), (1,3), wx.EXPAND)

        self.label3 = wx.StaticText(self, -1, label=u'Count Status : {}'.format(count))
        self.label3.SetBackgroundColour(wx.WHITE)
        self.label3.SetForegroundColour(wx.BLACK)
        sizer.Add(self.label3, (3,0), (1,4), wx.EXPAND)

        self.label4 = wx.StaticText(self, -1, label=u'Time Updated : {}'.format(update_time))
        self.label4.SetBackgroundColour(wx.WHITE)
        self.label4.SetForegroundColour(wx.BLACK)
        sizer.Add(self.label4, (4,0), (1,5), wx.EXPAND)

        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)
        self.timer.Start(50)

        self.SetSizer(sizer)
        self.Show(True)

    def on_timer(self,event):
        global update_time
        update_time = datetime.datetime.strftime(datetime.datetime.now(), '%d-%m-%y    %H:%M:%S')

        global count, flag                                 
        input = GPIO.input(40)
        if ((not flag) and input):
            flag = input
            count += 1
            button = 'Pressed'
            #self.label1.SetLabel("Button Status : Pressed")
            self.label1.SetLabel("Button Status : {}".format(button))
            self.label2.SetLabel("Flag Status : {}".format(flag))
            self.label3.SetLabel("Count Status : {}".format(count))
            self.label4.SetLabel("Time Updated : {}".format(update_time))

        elif ((not input) and flag):
            flag = input
            count += 1
            button = 'Debounce'
            #self.label1.SetLabel("Button Status : Debounce")
            self.label1.SetLabel("Button Status : {}".format(button))
            self.label2.SetLabel("Flag Status : {}".format(flag))
            self.label3.SetLabel("Count Status : {}".format(count))
            self.label4.SetLabel("Time Updated : {}".format(update_time))

if __name__ == "__main__":
    Rs = wx.App()
    OnOffApp_wx(None, -1, 'ON / OFF Status')
    Rs.MainLoop()

GPIO.cleanup()

这是我从 https://tryolabs.com/blog/2012/06/25/connecting-sql-server-database-python-under-ubuntu/https://gist.github.com/rduplain/1293636 这两个网站关注的我在 python 中的 sql 示例连接:

import pyodbc

dsn = 'datasource'
user = 'username'
password = 'password'
database = 'databasename'

con_string = 'DSN=%s; UID=%s; PWD=%s; DATABASE=%s;' % (dsn, user, password, database)
cnxn = pyodbc.connect(con_string)

我无法向您提供我的数据库信息,但任何人都可以展示如何从我的按钮切换程序将数据发送到 mssql 数据库,因为我已成功连接到我的服务器和数据库。

【问题讨论】:

  • 那是什么问题?已经连接了,是发送数据有问题还是不知道怎么发送数据?如果是后者,见here
  • 我不知道如何发送它,因为我还没有完成。
  • 我只想将标志和计数数据发送到数据库中的表中以供初学者使用。

标签: python sql sql-server wxpython pyodbc


【解决方案1】:

这是我的成功代码,它可以将数据发送到服务器,但它发送我的 update_time 的日期时间(如 1-12-2016)但是当我使用 select 在 mssql 服务器中查看数据时,它显示 2016 年 1 月 12 日。

import RPi.GPIO as GPIO
import datetime
import os
import pyodbc

dsn = 'sqlserverdatasource'
driver = 'FreeTDS'
user = 'username'
password = 'password'
database = 'databasename'

con_string = 'DSN=%s; DRIVER=%s; UID=%s; PWD=%s; DATABASE=%s;' % (dsn, driver, user, password, database)
cnxn = pyodbc.connect(con_string)
global cursor
cursor = cnxn.cursor()

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(40, GPIO.IN)

global count, flag
count = 0
flag = 0
button = "None"
input = GPIO.input(40)

global update_time
update_time = datetime.datetime.strftime(datetime.datetime.now(), '%d-%m-%y     %H:%M:%S')

try:
    import wx
except ImportError:
    raise ImportError, "The wxPython module is required to run this program."

class OnOffApp_wx(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, size = (500, 200), title = 'ON / OFF Status')
        self.SetBackgroundColour(wx.WHITE)
        self.SetWindowStyle(wx.STAY_ON_TOP)
        self.parent = parent
        self.initialize()

    def initialize(self):
        sizer = wx.GridBagSizer()
        font = wx.Font(20, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)
        self.SetFont(font)

        self.label1 = wx.StaticText(self, -1, label=u'Button Status : {}'.format(button))
        self.label1.SetBackgroundColour(wx.WHITE)
        self.label1.SetForegroundColour(wx.BLACK)
        sizer.Add(self.label1, (1,0), (1,2), wx.EXPAND)

        self.label2 = wx.StaticText(self, -1, label=u'Flag Status : {}'.format(flag))
        self.label2.SetBackgroundColour(wx.WHITE)
        self.label2.SetForegroundColour(wx.BLACK)
        sizer.Add(self.label2, (2,0), (1,3), wx.EXPAND)

        self.label3 = wx.StaticText(self, -1, label=u'Count Status : {}'.format(count))
        self.label3.SetBackgroundColour(wx.WHITE)
        self.label3.SetForegroundColour(wx.BLACK)
        sizer.Add(self.label3, (3,0), (1,4), wx.EXPAND)

        self.label4 = wx.StaticText(self, -1, label=u'Time Updated : {}'.format(update_time))
        self.label4.SetBackgroundColour(wx.WHITE)
        self.label4.SetForegroundColour(wx.BLACK)
        sizer.Add(self.label4, (4,0), (1,5), wx.EXPAND)

        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)
        self.timer.Start(50)

        self.SetSizer(sizer)
        self.Show(True)

    def on_timer(self,event):
        global update_time
        update_time = datetime.datetime.strftime(datetime.datetime.now(), '%d-%m-%y    %H:%M:%S')

        global count, flag                                 
        input = GPIO.input(40)
        cursor = cnxn.cursor()

        if ((not flag) and input):
            flag = input
            count += 1
            button = 'Pressed'
            #self.label1.SetLabel("Button Status : Pressed")
            self.label1.SetLabel("Button Status : {}".format(button))
            self.label2.SetLabel("Flag Status : {}".format(flag))
            self.label3.SetLabel("Count Status : {}".format(count))
            self.label4.SetLabel("Time Updated : {}".format(update_time))
            #cursor.execute("INSERT INTO  TableTest (Col1, Col2, Col3) VALUES(%s,%s)"%(int(flag),int(count)))
            cursor.execute("INSERT INTO  TableTest (Col1, Col2, Col3) VALUES(%s,%s,'%s')"%(int(flag),int(count),update_time))
            cnxn.commit()

        elif ((not input) and flag):
            flag = input
            count += 1
            button = 'Debounce'
            #self.label1.SetLabel("Button Status : Debounce")
            self.label1.SetLabel("Button Status : {}".format(button))
            self.label2.SetLabel("Flag Status : {}".format(flag))
            self.label3.SetLabel("Count Status : {}".format(count))
            self.label4.SetLabel("Time Updated : {}".format(update_time))
            #cursor.execute("INSERT INTO  TableTest (Col1, Col2, Col3) VALUES(%s,%s)"%(int(flag),int(count)))
            cursor.execute("INSERT INTO  TableTest (Col1, Col2, Col3) VALUES(%s,%s,'%s')"%(int(flag),int(count),update_time))
            cnxn.commit()

if __name__ == "__main__":
    Rs = wx.App()
    OnOffApp_wx(None, -1, 'ON / OFF Status')
    Rs.MainLoop()

GPIO.cleanup()
cursor.close()
cnxn.close()

【讨论】:

  • 现在任何人都可以通过添加按钮来帮助使用 select 语句从服务器创建和显示数据,并且输出显示在消息框中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 2014-09-15
  • 1970-01-01
  • 2022-06-23
  • 2018-07-23
  • 2021-08-27
  • 1970-01-01
相关资源
最近更新 更多